In Ubuntu Gnome 15.10 funktioniert Docker fast sofort, aber es gibt eine Feinheit. Die Container scheinen nicht auf das Netzwerk zugreifen zu können, bis ich den Docker-Dienst neu starte.
Nach dem Booten des Hosts hat die Docker0-Schnittstelle keine IP-Adresse.
$ 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)
Wenn ich dann einen Container starte, erhält die Docker0-Schnittstelle nur eine IPv6-Adresse und meines Wissens ist keine Netzwerkverbindung vom Container aus möglich. Ich kann die Host-IP, LAN-IPs oder Internet-IPs nicht anpingen. Ich verwende das Image ubuntu:trusty und führe Bash als Hauptprozess des Containers aus.
$ 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)
Wenn ich Docker neu starte, erhält Docker0 eine IPv4-Adresse (zusätzlich zur IPv6-Adresse) und alles funktioniert wie erwartet.
$ 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)
Natürlich kann ich den Docker-Dienst jedes Mal neu starten, wenn ich meinen Rechner neu starte, oder wahrscheinlich ein Startskript hacken, das dies für mich erledigt (ich habe es nicht versucht). Kennt jemand einesauberWie kann ich das beheben?
Antwort1
TL;DR: Ich habe Docker mit "apt-get install docker.io" installiert. Die Installation der neuesten Version nachhttps://docs.docker.com/installation/ubuntulinux/behebt das Problem.
Nach der Untersuchung des Problems scheint es, dass die Docker-Version 15.10 die Schnittstelle docker0 nicht korrekt erstellen und initialisieren kann. Beim ersten Durchlauf (Service Docker Start) wird die Schnittstelle erstellt, aber nicht initialisiert, und beim darauffolgenden Durchlauf (Service Docker Restart) wird sie initialisiert. Dies kann konsistent reproduziert werden, indem die Schnittstelle manuell mit brctl hinzugefügt und gelöscht wird. Dieser Fehler wurde im neuesten Docker behoben.
Antwort2
Für mich ist es NetworkManager, der das Problem verursacht. Der Docker-Dienst erstellt die Bridge wie vorgesehen und stellt sie dann auf dbus bereit. NetworkManager springt an, wenn er die neue Schnittstelle auf dbus erkennt, und versucht, sie zu konfigurieren (da er dumm genug ist, zu wissen, dass die Bridge Docker0 bereits ordnungsgemäß konfiguriert ist). NetworkManager kann Docker0 manchmal erfolgreich konfigurieren (neu konfigurieren), aber manchmal schlägt es fehl. Manchmal muss man also die Box neu starten und Docker0 wird eine IP zugewiesen, manchmal nicht.
Um zu verhindern, dass NetworkManager Probleme macht, fügen Sie hinzu
iface docker0 inet manual
anzunehmen hat/etc/network/interfaces
NetworkManager.conf
[ifupdown] managed=false
Das ist die Standardeinstellung am 15.10.
(der Fehler sollte wahrscheinlich gemeldet werden, um zu verhindern, dass NetworkManager Docker-spezifische Schnittstellen durcheinanderbringt)