Ich benutze Docker für Mac. Ich führe einen NodeJS-basierten Microservice in einem Docker-Container aus. Ich möchte den Node Microservice über den Browser testen. Wie erhalte ich die IP-Adresse des laufenden Docker-Containers?
Ich benutze Docker für Mac. Ich führe einen NodeJS-basierten Microservice in einem Docker-Container aus. Ich möchte den Node Microservice über den Browser testen. Wie erhalte ich die IP-Adresse des laufenden Docker-Containers?
Antworten:
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.1
und Ihr erster Container sollte sein, 172.17.0.2
wenn 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>
localhost
:)
http://172.17.0.2:anyPort
vom 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.
docker run --name struts --rm -i tomcat
2. Rufen Sie die IP Ihres Containers ab (falls Sie nur eine haben): docker inspect struts | grep '"IPAddress"' | head -n 1
3. Öffnen Sie sie im Browser des Hosts http://x.x.x.x:8080
. Sie können die Seite mit den Apache Tomcat-Standards sehen.
Verwenden Sie die --format
Option, um nur die IP-Adresse anstelle der gesamten Containerinformationen abzurufen:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
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
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
Für meinen Fall funktionierte unten auf dem Mac :
Ich konnte nicht direkt auf dem Mac auf Container-IPs zugreifen. Ich muss localhost
mit Portweiterleitung verwenden, zB wenn der Port 8000 ist, dannhttp://localhost:8000
Siehe https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Die ursprüngliche Antwort lautete: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
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 -p
Sie 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.