run network machine know create container check address ip docker iptables boot2docker

network - Darle a un contenedor de docker una dirección IP enrutable



docker-machine ip (2)

Estoy ejecutando esto en ubuntu 14.04 y he establecido docker0 en una IP estática que luego se enruta desde la IP pública a través del firewall. Estoy tratando de configurar mi API de backend para que se ejecute en un contenedor acoplable y me confunden un par de cosas.

1.) ¿Cómo docker0 la ip de docker0 la ip del contenedor de modo que docker0 sabría enviar los paquetes entrantes al contenedor (dinámicamente si es posible)?

2.) Si no lo hice de esa manera, ¿cómo podría hacerlo para no tener que configurarlo cada vez que haga una nueva corrida de ese contenedor acoplable?

¡Gracias por adelantado!


Recientemente tuve el mismo problema y lo resolví usando Network Containers :

  • Comience mi contenedor de ''servicio'' que quiero que esté disponible en la IP pública
  • Cree un nuevo contenedor de "red" que esté vinculado con el contenedor de servicio y enrute a los puertos expuestos por el contenedor de servicio. Este contenedor tendrá una interfaz de red adicional puenteada con el host para que pueda adquirir una IP de DHCP.
  • Cree un puente de red desde el host Docker hasta el contenedor utilizando Pipework de jpetazzo ( https://github.com/jpetazzo/pipework )
  • El contenedor de red adquiere una dirección de DHCP.

A partir de este momento, el contenedor de red estará disponible en la red y enrutará los puertos al contenedor de servicio. La principal ventaja es que el contenedor de "servicio" no tiene que saber nada acerca de la IP pública, DHCP, etc. De esta forma, todos los contenedores en ejecución se pueden hacer públicos en la red.

Para mayor comodidad, creé un script que hace todo esto a la vez. Hacer que un contenedor en ejecución esté disponible en una IP pública es tan simple como:

create-network-container.sh webserver ens32

En este caso, necesitaría tener un contenedor en ejecución llamado ''servidor web'', y una interfaz de red en el servidor ''ens32''. La interfaz es necesaria para crear el puente en el contenedor de red.

El script, información más detallada y ejemplos están disponibles en: https://github.com/jeroenpeeters/docker-network-containers


Supongo que quiere tener una IP asignada a su contenedor de docker fuera de la ventana acoplable.

Primero, cree una nueva IP y asígnela a la interfaz de su host (suponemos que su interfaz se llama eth0.

$> ip addr add 10.0.0.99/8 dev eth0

Ahora, cuando abras el contenedor, especifica esa dirección y vincúlala al contenedor de tu docker:

$> docker run -i -t --rm -p 10.0.0.99:80:8080 base

El argumento -p hará que Docker cree una regla NAT de iptables que transmitirá todo el tráfico que coincida con el destino 10.0.0.99:80 a su contenedor de docker en el puerto 8080.

Si necesita automatizar el proceso y escalarlo, consulte este recurso: https://github.com/jpetazzo/pipework

La documentación del docker es un buen comienzo: https://docker.github.io/engine/userguide/networking/