¿Cuál es el número de IP de mi contenedor con Docker beta para mac?


28

Anteriormente estaba usando el kit de herramientas Docker y podía usarlo docker-machine inspect <machine-name>para encontrar la IP de la máquina acoplable, para ver las páginas que sirve el contenedor dentro.

Me actualicé al cliente beta de Docker (para Mac) y no puedo encontrar dónde se sirven las páginas.

Supongo que porque es docker puro y no máquina docker, vería los puertos expuestos en localhost. Pero no están abiertos. Incluso a través de kitematic navego hasta el puerto expuesto (80) pero no veo nada.

$ 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 es realmente la IP de mi contenedor? Si no, ¿dónde puedo encontrar cuál es la IP? ¿O tengo un problema de asignación de puertos?

Respuestas:


25

Estás mirando la dirección IP dentro del contenedor que es 172.17.0.2 y solo existe "dentro" de los contenedores de la ventana acoplable (y entre ellos).

La dirección IP a la que desea conectarse es la dirección IP de sus máquinas host. Haga un ifconfig en su Mac y encuentre el correcto (generalmente 192.168.xy o 10.xyz). Localhost también debería funcionar desde fuera del contenedor.


55
No estoy seguro de quién votó en contra de esto, pero en realidad es la respuesta correcta. Con Docker para Mac, ya no hay una VM intermedia con una dirección IP de máquina separada. Golpear el host (ya sea a través de IP o localhost) debe reenviar las solicitudes al contenedor siempre que los puertos estén asignados correctamente.
DNJohnson

Gracias. Estaba confundido por qué esto había sido rechazado (dos veces). Tal vez porque parece demasiado simple para ser la respuesta real.
Mikael Kjær

No desestimé esto. Pero sospecho que hay un subconjunto de usuarios que, por cualquier razón, esta respuesta directa no funciona (o no). Estoy marcando como correcto.
Synesso el

2
Bueno, aquí hay algo interesante: en OS X cuando voy a mi VM xHyve a través del comando de pantalla y ejecuto curl localhost: 8080 : recibo respuesta de uno de los contenedores. Pero si hago lo mismo en el terminal OS X, la conexión se rechaza. ¿Cómo puede pasar esto?
mvmn

1
PD: Esto le sucedió a un contenedor creado a través de docker-compose.
mvmn

8

escriba el siguiente comando y obtendrá su ip de contenedor docker

$docker inspect <docker-container-name>

Desplácese hacia abajo y obtendrá la dirección IP en " Configuración de red "


Gracias. Olvidé mencionar que probé esto y no funcionó. Mi pregunta ha sido actualizada.
Synesso

Bien, pero no puedes hacer ping. Sospecho que esta es la razón por la cual la respuesta correcta anterior es rechazada. La pregunta que me queda es si hay una manera de conectar a la red en el host virtual. El host virtual todavía está allí si está mejor integrado en MacOS, y estoy seguro de que puede hacer ping a estas direcciones IP desde allí, pero ¿no puedo conectarme a esa red para que estén disponibles localmente en la Mac?
Gerry Gleason

6

Docker para Mac se ejecuta en la dirección IP 127.0.0.1


eso no es del todo una declaración falsa: P
jonas

De hecho, esta fue la respuesta más directa que resolvió mi problema.
James

1

La dirección IP se menciona explícitamente en la salida a 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"}

Además, localhostno es lo mismo que0.0.0.0


55
0.0.0.0 significa todas las direcciones IP en la máquina actual y generalmente se usa cuando se escucha, no se conecta. No entiendo cómo funcionaría el rizo anterior.
Mikael Kjær

2
0.0.0.0 es la dirección IP a la que está vinculado el servicio en el contenedor, y no significa nada en el contexto del host que lo ejecuta. la salida debajo de la columna PUERTOS dice que el puerto 80 del contenedor (0.0.0.0:80) está asignado al puerto 80 localmente (80 / tcp), así como al puerto 443 localmente.
Kevin

1
No, no es lo mismo, pero como se señaló, 0.0.0.0 no es una dirección IP, es una señal para escuchar que los quiero a todos, incluido localhost. En el contexto de la conexión, son iguales a menos que el servicio esté vinculado a una IP específica (localhost o la IP externa).
Gerry Gleason

0

Creo que 127.0.0.1 es para localhost.

Para obtener el docker id que se ejecuta en tu Mac. Ejecute "ifconfig" en el terminal y lo tendrá en el resultado además del 127.0.0.1

Principalmente algo como 192.168.xy

Espero eso ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.