No Ubuntu Gnome 15.10, o Docker quase funciona imediatamente, mas há uma sutileza. Os contêineres parecem não conseguir acessar a rede até que eu reinicie o serviço docker.
Após inicializar o host, a interface docker0 não possui nenhum endereço 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)
Se eu iniciar um contêiner, a interface docker0 obterá apenas um endereço ipv6 e nenhuma conexão de rede será possível a partir do contêiner, pelo que eu saiba. Não consigo executar ping no IP do host, nos IPs da LAN ou nos IPs da Internet. Estou usando a imagem ubuntu:trusty e executando o bash como o processo principal do contêiner.
$ 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)
Se eu reiniciar o docker, o docker0 obterá um endereço ipv4 (além do endereço ipv6) e tudo funcionará conforme o esperado.
$ 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)
É claro que posso reiniciar o serviço docker toda vez que reiniciar minha máquina ou provavelmente hackear um script de inicialização para fazer isso por mim (não tentei). Alguém sabe de umlimparmaneira de consertar isso?
Responder1
DR: instalei o Docker usando "apt-get install docker.io". Instalando a versão mais recente a seguirhttps://docs.docker.com/installation/ubuntulinux/corrige o problema.
Depois de investigar o problema, parece que a versão do Docker em 15.10 não consegue criar e inicializar a interface docker0 corretamente. Na primeira execução (service docker start) ele criará a interface, mas não conseguirá inicializá-la, e na execução subsequente (service docker restart) ele a inicializará. Isso pode ser reproduzido de forma consistente adicionando e excluindo a interface manualmente com brctl. Este bug foi corrigido no Docker mais recente.
Responder2
Para mim é o NetworkManager que bagunça. O serviço Docker cria uma ponte como deveria e depois a expõe no dbus. O NetworkManager começa a ver a nova interface no dbus e tenta configurá-la (já que é estúpido o suficiente saber que a ponte docker0 já está configurada corretamente). Às vezes, o NetworkManager consegue configurar (reconfigurar) o docker0, mas às vezes falha. Então, às vezes você reinicia a caixa e o docker0 terá o IP atribuído, outras vezes não.
Para impedir que o NetworkManager estrague, adicione
iface docker0 inet manual
assumir /etc/network/interfaces
que NetworkManager.conf
tem
[ifupdown] managed=false
que é o padrão em 15.10
(o bug provavelmente deve ser gerado para impedir que o NetworkManager bagunce as interfaces específicas do docker)