Cómo configurar limpiamente la red Docker en Ubuntu Gnome 15.10

Cómo configurar limpiamente la red Docker en Ubuntu Gnome 15.10

En Ubuntu Gnome 15.10, Docker casi funciona de inmediato, pero hay una sutileza. Parece que los contenedores no pueden acceder a la red hasta que reinicio el servicio Docker.

Después de iniciar el host, la interfaz docker0 no tiene ninguna dirección IP.

$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr ea:03:cc:9c:7a:cd
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:108 (108.0 B)

Si luego inicio un contenedor, la interfaz docker0 solo obtiene una dirección ipv6 y, hasta donde yo sé, no es posible ninguna conexión de red desde el contenedor. No puedo hacer ping a la IP del host, a las IP de LAN o a las IP de Internet. Estoy usando la imagen ubuntu:trusty y ejecutando bash como proceso principal del contenedor.

$ ifconfig docker0 
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

Si reinicio Docker, Docker0 obtiene una dirección ipv4 (además de la dirección ipv6) y todo funciona como se esperaba.

$ sudo service docker restart 
$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::7801:6eff:fe86:6dd8/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:704 (704.0 B)  TX bytes:3917 (3.9 KB)

Por supuesto, puedo reiniciar el servicio Docker cada vez que reinicio mi máquina, o probablemente piratear un script de inicio para que lo haga por mí (no lo he intentado). ¿Alguien sabe de unlimpio¿Manera de solucionar esto?

Respuesta1

TL;DR: Instalé Docker usando "apt-get install docker.io". Instalación de la última versión siguientehttps://docs.docker.com/installation/ubuntulinux/soluciona el problema.

Después de investigar el problema, parece que la versión de Docker 15.10 no puede crear ni inicializar la interfaz docker0 correctamente. En la primera ejecución (inicio de la ventana acoplable del servicio), creará la interfaz pero no podrá inicializarla, y en la ejecución posterior (reinicio de la ventana acoplable del servicio) la inicializará. Esto se puede reproducir consistentemente agregando y eliminando la interfaz manualmente con brctl. Este error se ha solucionado en la última versión de Docker.

Respuesta2

Para mí es NetworkManager el que se estropea. El servicio Docker crea un puente como debería y luego lo expone en dbus. NetworkManager comienza a ver una nueva interfaz en dbus e intenta configurarla (ya que es bastante estúpido saber que el puente docker0 ya está configurado bien). NetworkManager a veces logra configurar (reconfigurar) docker0 pero a veces falla. Entonces, a veces reinicia Box y Docker0 tendrá una IP asignada, otras veces no.

Para evitar que NetworkManager se estropee, agregue

iface docker0 inet manual

a /etc/network/interfacesasumir NetworkManager.conftiene

[ifupdown] managed=false

que está predeterminado en 15.10

(Probablemente debería plantearse un error para evitar que NetworkManager arruine las interfaces específicas de la ventana acoplable)

información relacionada