Quel est le numéro IP de mon conteneur utilisant Docker beta pour mac?


28

Auparavant, j'utilisais la boîte à outils Docker et je pouvais utiliser docker-machine inspect <machine-name>pour trouver l'IP de la machine Docker , afin d'afficher les pages servies par le conteneur.

J'ai effectué la mise à niveau vers le client beta docker (pour mac) et je ne trouve pas où les pages sont diffusées.

Je suppose que parce que c'est docker pur et non docker-machine, je verrais les ports exposés sur localhost. Mais ils ne sont pas ouverts. Même via kitematic, je navigue jusqu'au port exposé (80) mais je ne vois rien.

$ 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

172.17.0.2 est-il vraiment l'IP de mon conteneur? Sinon, où puis-je trouver ce qu'est l'IP? Ou ai-je un problème de mappage de port?

Réponses:


25

Vous regardez l'adresse IP à l'intérieur du conteneur qui est 172.17.0.2 et n'existe que "à l'intérieur" des conteneurs docker (et entre eux).

L'adresse IP à laquelle vous souhaitez vous connecter est l'adresse IP de votre machine hôte. Faites un ifconfig sur votre Mac et trouvez le bon (généralement 192.168.xy ou 10.xyz). Localhost devrait également fonctionner de l'extérieur du conteneur.


5
Je ne sais pas qui a voté contre, mais c'est en fait la bonne réponse. Avec Docker pour Mac, il n'y a plus de machine virtuelle intermédiaire avec une adresse IP de machine distincte. Frapper l'hôte (via IP ou localhost) doit transmettre les demandes au conteneur tant que les ports sont correctement mappés.
DNJohnson

Merci. J'étais confus pourquoi cela avait été voté (deux fois). Peut-être parce que cela semble trop simple pour être la vraie réponse.
Mikael Kjær

Je n'ai pas dévalorisé cela. Mais je soupçonne qu'il existe un sous-ensemble d'utilisateurs qui, pour une raison quelconque, cette réponse simple ne fonctionne pas (ou n'a pas) fonctionné. Je marque comme correct.
Synesso

2
Voici une chose intéressante - sur OS X lorsque je vais sur ma machine virtuelle xHyve via la commande screen et que je lance curl localhost: 8080 - j'obtiens une réponse de l'un des conteneurs. Mais si je fais la même chose dans le terminal OS X - connexion refusée. Comment cela peut-il arriver?
mvmn

1
PS Cela est arrivé à un conteneur créé via docker-compose.
mvmn

8

tapez la commande suivante et vous obtiendrez votre ip de conteneur docker

$docker inspect <docker-container-name>

Faites défiler vers le bas et vous obtiendrez l'adresse IP sous " NetworkSettings "


Merci. J'ai négligé de mentionner que j'ai essayé cela et que cela n'a pas fonctionné. Ma question a été mise à jour.
Synesso

D'accord, mais vous ne pouvez pas le cingler. Je soupçonne que c'est pourquoi la bonne réponse ci-dessus est rejetée. La question qui me reste est de savoir s'il existe un moyen de ponter vers le réseau sur l'hôte virtuel. L'hôte virtuel est toujours là s'il est mieux intégré à MacOS, et je suis sûr que vous pouvez cingler ces adresses IP à partir de là, mais ne puis-je pas faire le pont vers ce réseau afin qu'elles soient disponibles localement sur le Mac?
Gerry Gleason

6

Docker pour Mac s'exécute sur l'adresse IP 127.0.0.1


ce n'est pas entièrement une fausse déclaration: P
jonas

En fait, c'était la réponse la plus simple qui a résolu mon problème.
James

1

L'adresse IP est explicitement mentionnée dans la sortie de 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"}

En outre, localhostn'est pas la même chose que0.0.0.0


5
0.0.0.0 signifie toutes les adresses IP sur la machine actuelle et est généralement utilisé lors de l'écoute, pas de la connexion. Je ne comprends pas comment la boucle ci-dessus fonctionnerait même.
Mikael Kjær

2
Le 0.0.0.0 est l'adresse IP à laquelle le service est lié dans le conteneur et ne signifie rien dans le contexte de l'hôte qui l'exécute. la sortie sous la colonne PORTS indique que le port 80 du conteneur (0.0.0.0:80) est mappé au port 80 localement (80 / tcp), ainsi qu'au port 443 localement.
Kevin

1
Non, ce n'est pas pareil, mais comme indiqué, 0.0.0.0 n'est pas une adresse IP, c'est un signal à écouter que je veux tous, y compris localhost. Dans le contexte de la connexion, ils sont identiques, sauf si le service est lié à une adresse IP spécifique (localhost ou IP externe).
Gerry Gleason

0

Je crois que 127.0.0.1 est pour localhost.

Pour obtenir l'ID docker qui s'exécute sur votre Mac. Exécutez "ifconfig" dans le terminal et l'aurez dans le résultat en plus du 127.0.0.1

Surtout quelque chose comme 192.168.xy

J'espère que ça aide.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.