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>

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>

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

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

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.



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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.