Wie lautet die IP-Nummer meines Containers mit Docker Beta für Mac?

28

Früher habe ich das Docker-Toolkit verwendet und anhand dessen docker-machine inspect <machine-name>die IP-Adresse des Docker-Computers ermittelt, um die Seiten anzuzeigen, die von dem Container in dem Docker bereitgestellt werden.

Ich habe ein Upgrade auf den Docker-Beta-Client (für Mac) durchgeführt und kann nicht feststellen, wo die Seiten bereitgestellt werden.

Ich nehme an, weil es Docker pur und keine Docker-Maschine ist, würde ich die exponierten Ports auf localhost sehen. Sie sind aber nicht offen. Auch per Kitematic navigiere ich durch den exponierten Port (80), sehe aber nichts.

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

Ist 172.17.0.2 wirklich die IP meines Containers? Wenn nicht, wo finde ich die IP? Oder habe ich ein Port-Mapping-Problem?

Synesso
quelle

Antworten:

25

Sie sehen die IP-Adresse in dem Container, der 172.17.0.2 lautet und nur "in" den Docker-Containern (und dazwischen) vorhanden ist.

Die IP-Adresse, zu der Sie eine Verbindung herstellen möchten, ist die IP-Adresse Ihres Host-Computers. Führen Sie eine ifconfig auf Ihrem Mac durch und finden Sie die richtige (normalerweise 192.168.xy oder 10.xyz). Localhost sollte auch von außerhalb des Containers funktionieren.

Mikael Kjær
quelle
5
Ich bin mir nicht sicher, wer dies abgelehnt hat, aber es ist tatsächlich die richtige Antwort. Mit Docker für Mac gibt es keine Zwischen-VM mehr mit einer separaten Maschinen-IP-Adresse. Wenn Sie den Host (entweder über IP oder localhost) erreichen, sollten Sie die Anforderungen an den Container weiterleiten, solange die Ports korrekt zugeordnet sind.
DNJohnson
Vielen Dank. Ich war verwirrt, warum dies (zweimal) abgelehnt worden war. Vielleicht, weil es einfach zu einfach scheint, die eigentliche Antwort zu sein.
Mikael Kjær
Ich habe das nicht abgelehnt. Ich vermute jedoch, dass es eine Untergruppe von Benutzern gibt, die aus irgendeinem Grund mit dieser einfachen Antwort nicht (oder nicht) zufrieden sind. Ich markiere als korrekt.
Synesso
2
Nun, hier ist eine interessante Sache - unter OS X bekomme ich eine Antwort von einem der Container, wenn ich per Bildschirmbefehl zu meiner xHyve-VM gehe und curl localhost: 8080 ausführe . Aber wenn ich das gleiche in OS X-Terminal mache - wird die Verbindung abgelehnt. Wie kann das passieren?
mvmn
1
PS Dies geschah mit einem Container, der über Docker-Compose erstellt wurde.
mvmn
8

Geben Sie den folgenden Befehl ein und Sie erhalten Ihre Docker-Container-IP

$docker inspect <docker-container-name>

Scrollen Sie nach unten und Sie erhalten die IP-Adresse unter " NetworkSettings "

Riddhi Gohil
quelle
Vielen Dank. Ich habe versäumt zu erwähnen, dass ich das ausprobiert habe und es hat nicht funktioniert. Meine Frage wurde aktualisiert.
Synesso
Richtig, aber du kannst es nicht anpingen. Ich vermute, dass dies der Grund ist, warum die obige richtige Antwort abgelehnt wird. Die Frage, die mir bleibt, ist, ob es eine Möglichkeit gibt, eine Verbindung zum Netzwerk auf dem virtuellen Host herzustellen. Der virtuelle Host ist immer noch da, wenn er besser in MacOS integriert ist, und ich bin sicher, dass Sie diese IP-Adressen von dort aus anpingen können, aber kann ich keine Verbindung zu diesem Netzwerk herstellen, damit sie lokal auf dem Mac verfügbar sind?
Gerry Gleason
6

Docker für Mac wird unter der IP-Adresse 127.0.0.1 ausgeführt

digitaldavenyc
quelle
das ist keine ganz falsche
aussage
In der Tat war dies die direkteste Antwort, die mein Problem gelöst hat.
James
1

Die IP-Adresse wird in der Ausgabe an explizit erwähnt docker ps.

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

Darüber hinaus localhostist nicht das gleiche wie0.0.0.0

Synesso
quelle
5
0.0.0.0 bedeutet alle IP-Adressen auf dem aktuellen Computer und wird normalerweise beim Abhören verwendet, ohne eine Verbindung herzustellen. Ich verstehe nicht, wie die obige Locke überhaupt funktionieren würde.
Mikael Kjær
2
Die 0.0.0.0 ist die IP-Adresse, an die der Dienst im Container gebunden ist, und hat im Kontext des Hosts, auf dem er ausgeführt wird, keine Bedeutung. Die Ausgabe in der Spalte PORTS besagt, dass der Port 80 (0.0.0.0:80) des Containers sowohl lokal (80 / tcp) als auch lokal (443) Port 80 zugeordnet ist.
Kevin
1
Nein, es ist nicht dasselbe, aber wie bereits erwähnt, ist 0.0.0.0 keine IP-Adresse, sondern ein Signal zum Abhören, dass ich sie alle einschließlich localhost haben möchte. Beim Herstellen einer Verbindung sind sie identisch, sofern der Dienst nicht an eine bestimmte IP (localhost oder externe IP) gebunden ist.
Gerry Gleason
0

Ich glaube, dass 127.0.0.1 für localhost ist.

So ermitteln Sie die Docker-ID, die auf Ihrem Mac ausgeführt wird Führen Sie "ifconfig" im Terminal aus und haben Sie es neben 127.0.0.1 im Ergebnis

Meistens so etwas wie 192.168.xy

Ich hoffe es hilft.

Tuananhcwrs
quelle