Próbuję uzyskać dostęp do strony powitalnej Wildfly uruchomionej na kontenerze Docker w systemie Windows 10 Pro. Oto co zrobiłem:
Wyciągnął obraz:
docker pull jboss/wildfly
Uruchom kontener Wildfly (działa to dobrze, w dzienniku Wildfly widzę, że uruchomił się poprawnie):
docker run -it -p 8080:8080 jboss/wildfly
Znajdź identyfikator kontenera:
docker ps
Sprawdź adres IP:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78
Adres IP jest 172.17.0.2
, w przeglądarce idę do http://172.17.0.2:8080/, ale przeglądarka się zawiesza i upłynął limit czasu. czego mi brakuje?
AKTUALIZACJA
Próbowałem też z 127.0.0.1:8080
i to też nie działa
AKTUALIZACJA 2
Dziennik konsoli:
docker --version
#Docker version 19.03.1, build 74b1e89e8a
docker run hello-world
#Hello from Docker!
docker run --detach --publish 8080:80 --name webserver nginx
#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest: sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17
docker ps
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
10.0.75.x
to nie jest adres zewnętrzny i przeglądarka próbuje go znaleźć w Internecie?docker --version
docker run hello-world
docker run --detach --publish 8080:80 --name webserver nginx
localhost:8080
i upłynął limit czasu.docker ps
pokazujeCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
Odpowiedzi:
Domyślnie podczas tworzenia kontenera nie publikuje on żadnych swoich portów w świecie zewnętrznym. Sieć 172.17.XX jest wewnętrzna. Jeśli chcesz powiązać adres IP z hostem ip, uruchom kontener dokera z flagą -p, w ten sposób:
-p 8080: 8080
źródło
Od: https://docs.docker.com/docker-for-windows/networking/
Powinien być dostępny z http: // localhost: 8080
Jeśli to nie zadziała, wypróbuj przykład systemu Windows
Który powinien być dostępny http: // localhost: 80
https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples
Jeśli nawet to się nie powiedzie, spróbuj:
I użyj http: // [docker-machine-ip]: 80
źródło
Kluczowa informacja to
Docker container in Windows 10 Pro
- jest to bardzo ogólna specyfikacja działania Dockera w systemie Windows. Nie może być wiele opcji, na przykładDocker for Windows
z / bezLinux containers
,Docker toolbox
zdalne instancja, ....Zasadniczo kontenery Docker w systemie Windows działają zwykle na maszynie wirtualnej (Hyper-V, Virtualbox, ...). Istnieje więc dodatkowa warstwa sieci, która może nie być dostępna bezpośrednio z przestrzeni nazw sieci Windows. Ale połączony przykład działa na komputerze z systemem Linux, na którym ta dodatkowa warstwa sieciowa nie istnieje. I to jest powód, dla którego przykład kopiowania / wklejania Linuksa nie działa w systemie Windows. Więc uruchom kontener jak zwykle i ujawnij port 8080:
Ale adres IP dostępu będzie inny i nie będzie można użyć adresu IP kontenera, ponieważ ta wewnętrzna sieć dokerów prawdopodobnie nie jest dostępna z systemu Windows. Zamiast tego spróbuj użyć adresu IP systemu operacyjnego Windows. W końcu sprawdź dokumentację zastosowanego
Docker on Windows
rozwiązania i dowiedz się, który adres IP jest używany dla odsłoniętych portów.Jeśli masz zaawansowane umiejętności pracy w systemie Windows / Linux, możesz w jakiś sposób przekierować / przesłać port z przestrzeni nazw sieci kontenerów, przez pośrednią warstwę sieci VM do warstwy sieci Windows. Ale może to być dość skomplikowane.
źródło
8080:8080
to, co teoretycznie powinno działać, ale nie działa. Nie wiem o sieciach, gdzie powinienem zacząć szukać?There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.
. Proszę poradzić sobie z tym ograniczeniem.Miałem kolegę pracującego nad systemem Windows, który napotkał ten sam problem. Włożył w to wiele wysiłku i po prostu nigdzie nie mógł się dostać. Wygląda na to, że w Docker Desktop na Windows dzieje się wiele dziwnych rzeczy. W końcu właśnie zainstalowaliśmy podsystem Linux dla Windows i zainstalowaliśmy tam dokera i od tego czasu działało to dla niego jak urok. Jeśli chcesz pozostać przy systemie Windows i nie przeszkadza ci praca nad podsystemem Linux, sugeruję pójść tą drogą. Poszliśmy dalej niż sugerował Jan Garaj i po prostu uznałem, że to strata czasu. Docker Desktop dla Windows ma być env, w którym całkowicie się w nim pracuje - używając kontenerów deweloperskich itp. Rzeczy z Host-Container są z tym bolesne.
źródło