Wildfly w pojemniku Docker nie uruchamia się

10

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:8080i 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
ps0604
źródło
Zobacz odpowiedź stackoverflow.com/a/43762751/7873775 i spróbuj 10.0.75.1:8080 i 10.0.75.2:8080.
Evgeniy Khyst
Przepraszam, ale to nie zadziałało. Mam zarówno dokerkę, jak i przeglądarkę działającą na tym samym komputerze z systemem Windows 10. Czy 10.0.75.xto nie jest adres zewnętrzny i przeglądarka próbuje go znaleźć w Internecie?
ps0604
1
OK, spróbujmy znaleźć problem. docker --versiondocker run hello-worlddocker run --detach --publish 8080:80 --name webserver nginx
Opublikuj
Zobacz pytanie zaktualizowane w dzienniku konsoli. Próbowałem localhost:8080i upłynął limit czasu. docker pspokazujeCONTAINER 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
ps0604
@Evgeniy Khyst Znalazłem ten artykuł, który mówi o sieci dokerów. Mówi, że serwer działający w kontenerze musi nasłuchiwać wszystkich interfejsów (ostatnia część artykułu), czy to dotyczy?
ps0604

Odpowiedzi:

3

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

Zamapuj port TCP 8080 w kontenerze na port 8080 na hoście Docker

Ivan Vovk
źródło
Dlaczego ten przykład działa, jeśli porty nie są publikowane w świecie zewnętrznym?
ps0604,
@ Czy źle zredagowałeś odpowiedź, jeśli spojrzysz na pytanie, to dokładnie to, co robiłem.
ps0604,
@ ps0604 wygląda na problem z siecią. W twoim przypadku sprawdź reguły zapory ogniowej
Ivan Vovk
Więc twoja odpowiedź była nieprawidłowa?
ps0604,
Moja odpowiedź jest poprawna, ponieważ opiera się na zaleceniach dotyczących dokumentacji.
Ivan Vovk,
3

Od: https://docs.docker.com/docker-for-windows/networking/

Przekazywanie portów działa dla hosta lokalnego; --publikuj, -p lub -P wszystkie prace. Porty odsłonięte z systemu Linux są przekazywane do hosta.

Powinien być dostępny z http: // localhost: 8080


Jeśli to nie zadziała, wypróbuj przykład systemu Windows

docker run -d -p 80:80 --name webserver nginx

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:

docker-machine ip default

I użyj http: // [docker-machine-ip]: 80

Tyhal
źródło
1
nie działa w localhost: 8080, przepraszam
ps0604
Czy możesz wypróbować powyższy przykład, aby sprawdzić, czy jest to problem z jboss / wildfly, czy też z siecią Windows?
Tyhal
A jeśli nginx nie działa, możesz uruchomić domyślnie „
docker
0

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ład Docker for Windowsz / bez Linux containers, Docker toolboxzdalne 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:

docker run -it -p 8080:8080 jboss/wildfly

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 Windowsrozwią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.

Jan Garaj
źródło
Jan, zainstalowałem Docker Desktop dla Windows , pobrałem obraz i uruchomiłem kontener Wildfly, jak wyjaśniono w powyższym samouczku. W konsoli widzę, że zaczyna się dobrze i 8080:8080to, co teoretycznie powinno działać, ale nie działa. Nie wiem o sieciach, gdzie powinienem zacząć szukać?
ps0604
@ ps0604 Jeśli chcesz ślepo postępować zgodnie z samouczkiem dotyczącym systemu Linux, skorzystaj z systemu Linux. Jak wspomniałem, doc jest twoim przyjacielem - docs.docker.com/docker-for-windows/networking jest wyraźnie wspomniane 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.
Jan Garaj
0

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.

Sam Thomas
źródło
Tak, zgadzam się, utworzę kontenery w Ubuntu zamiast Windows, nie mam tam problemów. Jedyną rzeczą jest to, że rozwijam się w systemie Windows, więc musiałbym przetestować trzy razy, raz w systemie Windows podczas programowania, następnie w kontenerze z linuksem i na końcu, gdy załaduję go do chmury. Jeśli mogę uruchomić kontener w systemie Windows, przetestowałbym tylko dwa razy.
ps0604
dlatego zasugerowałem podsystem linux .. tak naprawdę nie musisz zmieniać kontekstu 3 razy, może 2-2,5 razy;)
Sam Thomas