So richten Sie den Netzwerk-Docker in Ubuntu Gnome 15.10 sauber ein


7

In Ubuntu Gnome 15.10 funktioniert Docker fast sofort, aber es gibt eine Subtilität. Die Container scheinen nicht in der Lage zu sein, auf das Netzwerk zuzugreifen, 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 es ist keine Netzwerkverbindung vom Container möglich, soweit ich das beurteilen kann. Ich kann die Host-IP, LAN-IPs oder Internet-IPs nicht anpingen. Ich verwende das Ubuntu: Trusty Image 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 Computer neu starte, oder wahrscheinlich ein Startskript hacken, um dies für mich zu tun (ich habe es nicht versucht). Kennt jemand einen sauberen Weg, um dies zu beheben?

Antworten:


7

TL; DR: Ich hatte Docker mit "apt-get install docker.io" installiert. Die Installation der neuesten Version unter https://docs.docker.com/installation/ubuntulinux/ behebt das Problem.

Nach der Untersuchung des Problems scheint es, dass die Version von Docker in 15.10 die Docker0-Schnittstelle nicht korrekt erstellen und initialisieren kann. Beim ersten Lauf (Start des Service-Dockers) wird die Schnittstelle erstellt, aber nicht initialisiert, und beim nachfolgenden Lauf (Neustart des Service-Dockers) wird sie initialisiert. Dies kann reproduziert werden, indem die Schnittstelle manuell manuell mit brctl hinzugefügt und gelöscht wird. Dieser Fehler wurde im neuesten Docker behoben.


Ich sehe dieses Problem immer noch mit Docker 1.9. Würde es Ihnen etwas ausmachen, Ihre Schritte zum Entfernen von "docker.io" und zum Installieren von "docker-engine" detailliert zu beschreiben? Haben Sie docker0 manuell entfernt?
Andrew Guenther

@AndrewGuenther, ich erinnere mich nicht daran, Docker0 absichtlich entfernt zu haben, aber ich habe es einige Male mit brctl von Bridge-Utils entfernt / neu erstellt. Ich bin mir nicht sicher, in welchem ​​Zustand es beim Upgrade auf Docker 1.9 belassen wurde. Ich habe docker.io mit apt-get remove und dann apt-get autoremove entfernt.
Marcv81

1.9.1? Ich sehe 1.9.0 als das neueste im 15.10 apt Repository. Bist du sicher, dass du das hast? Und wenn ja, wie haben Sie es installiert?
Andrew Guenther

Lesen Sie noch einmal, ich habe 1.9 geschrieben :) Ich bin nicht mehr vor dieser Maschine, aber es hätte die Version, die zu der Zeit auf dem Docker-Repo war.
Marcv81

Zur Verteidigung von @ AndrewGuenther las ich "Docker 1.9 I" auch als "Docker 1.9.1".
Mike Crowe

2

Für mich ist es NetworkManager, der es vermasselt. Der Docker-Dienst erstellt eine Bridge, wie sie dann auf dbus verfügbar gemacht werden soll. NetworkManager beginnt damit, eine neue Schnittstelle auf dbus zu sehen und zu versuchen, sie zu konfigurieren (da es dumm genug ist zu wissen, dass Bridge Docker0 bereits in Ordnung konfiguriert ist). NetworkManager ist manchmal erfolgreich beim Konfigurieren (Neukonfigurieren) von docker0, aber manchmal schlägt dies fehl. Manchmal wird die Box neu gestartet und Docker0 wird die IP zugewiesen, manchmal nicht.

Um zu verhindern, dass NetworkManager durcheinander kommt, fügen Sie hinzu

iface docker0 inet manual

zu /etc/network/interfacesvermuten NetworkManager.confhat

[ifupdown] managed=false

Dies ist die Standardeinstellung am 15.10

(Der Fehler sollte wahrscheinlich ausgelöst werden, um zu verhindern, dass NetworkManager Docker-spezifische Schnittstellen durcheinander bringt.)


Ich wollte dir eine -1 geben. Hier ist der Grund: Die ursprüngliche Frage lautet "Wie kann der Netzwerk-Docker in Ubuntu Gnome 15.10 sauber eingerichtet werden?", Aber ich sehe nicht, wie Sie versuchen, diese Frage zu beantworten. Bitte klicken Sie unter Ihrer Antwort auf Bearbeiten und versuchen Sie, die Frage zu beantworten.
MadMike

Ich habe genau geantwortet und eine Lösung bereitgestellt, die darin besteht, ifce docker0 inet manual zu / etc / network / interfaces hinzuzufügen - haben Sie dies versucht? Auf diese Weise Person, die die Frage gestellt sollten Neustart Docker Dienst nie benötigen IP - Adresse docker0 fehlt aussortieren - bitte sauberere Lösung bieten , wenn Sie es wissen
greg ein

@gregone: Ich bin der OP, danke für deinen Beitrag. Das Problem ist bereits gelöst. In meinem Fall würde ich nach dem Neustart niemals eine IP erhalten, daher könnte dies eine andere Ursache sein. In einem anderen Fall möchten Sie möglicherweise die Verwendung von Interpunktion großzügiger in Betracht ziehen.
Marcv81

@ Greg Okay, ich sehe , dass Sie tun , eine Antwort geben. Ich hatte nur Probleme, den Kopf zum Schwanz zu machen. Entschuldigung, ich habe es nicht gesehen.
MadMike
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.