Używam Dockera dla komputerów Mac. Uruchamiam mikrousługę opartą na nodejs w kontenerze Docker. Chcę przetestować mikrousługę węzła za pośrednictwem przeglądarki. Jak uzyskać adres IP działającego kontenera Docker?
Używam Dockera dla komputerów Mac. Uruchamiam mikrousługę opartą na nodejs w kontenerze Docker. Chcę przetestować mikrousługę węzła za pośrednictwem przeglądarki. Jak uzyskać adres IP działającego kontenera Docker?
Odpowiedzi:
Jeśli nie chcesz mapować portów z hosta do kontenera, możesz uzyskać bezpośredni dostęp do adresu IP docker range dla kontenera. Ten zakres jest domyślnie dostępny tylko z Twojego hosta. Możesz sprawdzić dane sieci kontenerów, wykonując:
docker inspect <containerNameOrId>
Prawdopodobnie lepiej jest filtrować:
docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
Zwykle domyślny zakres adresów IP dockera to 172.17.0.0/16
. Twój host powinien być, 172.17.0.1
a pierwszy kontener powinien być, 172.17.0.2
jeśli wszystko jest w porządku i nie określono żadnych specjalnych opcji sieciowych.
EDYTUJ Kolejny bardziej elegancki sposób korzystania z funkcji dockera zamiast „sztuczek bash”:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
localhost
:)
http://172.17.0.2:anyPort
hosta. Oczywiście, jeśli chcesz uzyskać do niego dostęp za pomocą hosta lokalnego na hoście, musisz zmapować porty. Zobaczy, czego chce PO.
docker run --name struts --rm -i tomcat
2. Pobierz adres IP swojego kontenera (jeśli masz tylko jeden): docker inspect struts | grep '"IPAddress"' | head -n 1
3. Otwórz go w przeglądarce hosta http://x.x.x.x:8080
. Możesz zobaczyć domyślną stronę Apache Tomcat.
Użyj --format
opcji, aby uzyskać tylko adres IP zamiast całej informacji o kontenerze:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
W przypadku nowoczesnych silników dokowanych użyj tego polecenia:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
a dla starszych silników użyj:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
jeśli chcesz uzyskać go bezpośrednio w pojemniku, możesz spróbować
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
W moim przypadku poniżej działało na komputerze Mac :
Nie mogłem uzyskać dostępu do adresów IP kontenerów bezpośrednio na komputerze Mac. Muszę użyć localhost
z przekierowaniem portów, np. Jeśli port to 8000, tohttp://localhost:8000
Zobacz https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Oryginalna odpowiedź była z: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
Nie możesz uzyskać dostępu do adresu IP stacji dokującej spoza tego komputera głównego. Jeśli twoja przeglądarka znajduje się na innym komputerze, lepiej zamapuj port hosta na port kontenera, przekazując -p 8080:8080
polecenie uruchomienia.
Przekazywanie -p
można zmapować port hosta na port kontenera, a serwer proxy jest ustawiony tak, aby przekazywał cały ruch z tego portu hosta do wyznaczonego portu kontenera.