So erhalten Sie die IP-Adresse des laufenden Docker-Containers

Antworten:

114

Wenn Sie dem Container keine Ports von Ihrem Host zuordnen möchten, können Sie direkt auf die Docker-Bereichs-IP für den Container zugreifen. Auf diesen Bereich wird standardmäßig nur von Ihrem Host aus zugegriffen. Sie können Ihre Containernetzwerkdaten folgendermaßen überprüfen:

docker inspect <containerNameOrId>

Wahrscheinlich ist es besser zu filtern:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

Normalerweise ist der Standard-IP-Bereich für Docker 172.17.0.0/16. Ihr Host sollte sein 172.17.0.1und Ihr erster Container sollte sein, 172.17.0.2wenn alles normal ist und Sie keine speziellen Netzwerkoptionen angegeben haben.

BEARBEITEN Eine andere elegantere Möglichkeit, Docker-Funktionen anstelle von "Bash-Tricks" zu verwenden:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
OscarAkaElvis
quelle
7
Sie sprechen von der internen IP und sie hat nichts mit der vorliegenden Frage zu tun. Ihre Antwort gibt dem Leser nur Verwirrung. Da die IP die IP des Computers ist, auf dem der Docker ausgeführt wird. Welches ist nur localhost:)
David Gatti
Sie liegen falsch. Das OP hat nichts über den Microservice angegeben, der von außen zugänglich sein muss. Er sagte nur "Testknoten-Mikroservice über den Browser" und dies kann mit meiner vorgeschlagenen Methode http://172.17.0.2:anyPortvom Host aus erfolgen. Wenn Sie mit localhost auf dem Host darauf zugreifen möchten, müssen Sie natürlich die Ports zuordnen. Mal sehen, was das OP will.
OscarAkaElvis
3
Sie sagen, dass Sie vom Host aus auf die interne IP im Container zugreifen können? Das ist physisch unmöglich, das ist ein völlig anderes Netzwerk. Ich habe nicht nur gerade nachgesehen und ja, ich kann nicht auf die 172.17.0.7 meines Docker-Containers zugreifen. Dann sollte ich alle Docker-Konkurrenten sehen können, wenn ich meinen Host-Computer mit einem Netzwerkscanner scanne. Dies ist nicht der Fall nochmal. Ich weiß, dass es nicht funktionieren sollte, ich habe getestet, was Sie sagen (Sie wissen es nie) und es funktioniert nicht. Vielleicht fehlt Ihrer Erklärung ein Schlüsselteil?
David Gatti
Auf die Container kann vom Host aus zugegriffen werden. Probieren Sie es selbst aus ... Ich gebe Ihnen einige Hinweise. 1. Laden Sie einen Run-Container herunter: docker run --name struts --rm -i tomcat2. Rufen Sie die IP Ihres Containers ab (falls Sie nur eine haben): docker inspect struts | grep '"IPAddress"' | head -n 13. Öffnen Sie sie im Browser des Hosts http://x.x.x.x:8080. Sie können die Seite mit den Apache Tomcat-Standards sehen.
OscarAkaElvis
1
Ich konnte nicht auf die Web-App im Container zugreifen, ohne den Port mit -p
bilal.haider zuzuordnen.
22

Verwenden Sie die --formatOption, um nur die IP-Adresse anstelle der gesamten Containerinformationen abzurufen:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Nilesh Patel
quelle
4
Verwenden Sie in Windows Host doppelte Anführungszeichen anstelle von einfachen Anführungszeichen. ZB sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID oder NAME> Referenz: link
Vineet Sajwan
1
neues Format der Informationen über Container hier
Igor
18

Verwenden Sie für moderne Docker-Engines diesen Befehl:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

und für ältere Motoren verwenden:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Nima Ghoroubi
quelle
Wie im Kommentar von @sanyash im ursprünglichen OP-Bereich erwähnt und verlinkt.
Jesse Chisholm
Fehler beim Parsen der Vorlage: Vorlage
::
11

Wenn Sie es direkt im Container erhalten möchten, können Sie es versuchen

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Ilya Yevlampiev
quelle
5

Sie können Ihren Container mit der Flagge starten -P. Dies "weist" dem belichteten Port Ihres Bildes einen zufälligen Port zu.

Mit docker port <container id>können Sie den zufällig ausgewählten Port sehen. Der Zugang ist dann über möglich localhost:port.

gScht
quelle
-2

Sie können nicht von außerhalb dieses Host-Computers auf die IP des Dockers zugreifen. Wenn sich Ihr Browser auf einem anderen Computer befindet, sollten Sie den Host-Port besser dem Container-Port zuordnen -p 8080:8080, indem Sie den Befehl run ausführen.

Beim Übergeben können -pSie den Host-Port dem Container-Port zuordnen, und ein Proxy ist so eingestellt, dass der gesamte Datenverkehr für diesen Host-Port an den angegebenen Container-Port weitergeleitet wird.

Akash Sharma
quelle