Jak uzyskać adres IP działającego kontenera Docker

Odpowiedzi:

116

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.1a pierwszy kontener powinien być, 172.17.0.2jeś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>
OscarAkaElvis
źródło
7
Mówisz o wewnętrznym adresie IP i nie ma to nic wspólnego z aktualnym pytaniem. Twoja odpowiedź wprowadza czytelnika w zamęt. Ponieważ adres IP jest adresem IP maszyny, na której działa Docker. Co jest po prostu localhost:)
David Gatti
Mylisz się. W OP nie określono nic o mikrousłudze, która musi być dostępna z zewnątrz. Powiedział tylko, że „przetestuj mikrousługę węzła przez przeglądarkę” i można to zrobić za pomocą proponowanej przeze mnie metody przy użyciu http://172.17.0.2:anyPorthosta. Oczywiście, jeśli chcesz uzyskać do niego dostęp za pomocą hosta lokalnego na hoście, musisz zmapować porty. Zobaczy, czego chce PO.
OscarAkaElvis
3
Mówisz, że możesz uzyskać dostęp do wewnętrznego adresu IP wewnątrz kontenera z hosta? To jest fizycznie niemożliwe, to jest zupełnie inna sieć. Nie tylko sprawdziłem i tak, nie mogę uzyskać dostępu do 172.17.0.7 mojego kontenera docker, to powinienem być w stanie zobaczyć wszystkich kandydatów do dockera, jeśli przeskanuję mój komputer hosta za pomocą skanera sieciowego, a tak nie jest jeszcze raz. Wiem, że nie powinno działać, przetestowałem to, co mówisz (nigdy nie wiesz) i nie działa. Więc może w twoim wyjaśnieniu brakuje kluczowej części?
David Gatti
Kontenery są dostępne z hosta. Spróbuj sam ... Dam ci kilka wskazówek. 1. Pobierz kontener uruchamiania: docker run --name struts --rm -i tomcat2. Pobierz adres IP swojego kontenera (jeśli masz tylko jeden): docker inspect struts | grep '"IPAddress"' | head -n 13. Otwórz go w przeglądarce hosta http://x.x.x.x:8080. Możesz zobaczyć domyślną stronę Apache Tomcat.
OscarAkaElvis
1
Nie mogłem uzyskać dostępu do aplikacji internetowej w kontenerze bez mapowania portu przy użyciu -p
bilal.haider
22

Użyj --formatopcji, aby uzyskać tylko adres IP zamiast całej informacji o kontenerze:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Nilesh Patel
źródło
4
Na hoście z systemem Windows użyj podwójnych cudzysłowów zamiast pojedynczych cudzysłowów. Np. Sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Odniesienie: link
Vineet Sajwan
1
nowy format informacji o kontenerze tutaj
Igor
20

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
Nima Ghoroubi
źródło
Jak wspomniano i połączono w komentarzu @sanyash w oryginalnym obszarze PO.
Jesse Chisholm
Błąd analizy szablonu: template:: 1: nieoczekiwana niezamknięta akcja w poleceniu
gmlvsv
11

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
Ilya Yevlampiev
źródło
5

Możesz rozpocząć swój kontener flagą -P. To „przypisuje” losowy port do odsłoniętego portu obrazu.

Za pomocą docker port <container id>można zobaczyć losowo wybrany port. Dostęp jest wtedy możliwy przez localhost:port.

gScht
źródło
2

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ć localhostz 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

Lavande
źródło
-3

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:8080polecenie uruchomienia.

Przekazywanie -pmoż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.

Akash Sharma
źródło