2016-08-26 5 views
25

Es scheint systemd ist nicht aktiv oder in Ubuntu Docker Bilder verfügbar.systemd und systemctl in Ubuntu Docker Bilder

Ich benutze Docker Container aus den Bildern ubuntu:16.04 und ubuntu:16.10.

Wenn ich systemctl status ssh im 16,04 Container ausführen, ist das Ergebnis der Fehler Failed to connect to bus: No such file or directory. Im Container 16.10 ist der Fehler bash: systemctl: command not found.

Wenn ich tun which systemctl systemctl ist in der 16.04 Container aber nicht in der 16.10 Container gefunden.

Ich habe festgestellt, dass /lib/systemd existiert.

Ich habe versucht, Systemd mit apt-get install systemd libpam-systemd systemd-ui zu installieren. Dann which systemctl Funde systemctl in 16.10 aber systemctl status ssh gibt immer noch den Fehler Failed to connect to bus: No such file or directory

Meine Hauptfrage ist: Wie kann systemd und systemctl für den Einsatz in Ubuntu Docker Bilder aktiviert werden?

Warum ist Systemd nicht in Ubuntu Docker Containern aktiv? Wird systemd nicht zum Instanziieren des Containers verwendet?

Ich habe versagt für Ubuntu/Ubuntu Docker Bilder alle Unterlagen zu diesem Thema zu finden, die nur Informationen über den Ubuntu Übergang Upstart-systemd. Gibt es Unterlagen, die eine vollständige Erklärung geben?

+0

Wenn Sie ein voll funktionsfähiges Init-System haben möchten, verwenden Sie eine virtuelle Maschine. – user2105103

+0

Es gibt mehrere Vorschläge, ein Init-System an PID-1 in einem Container zu imitieren. Grundsätzlich sollte es auf das SIGTERM reagieren, das von "docker stop" gesendet wird und es an andere Prozesse im Container verteilt. Und es sollte in der Lage sein, Zombies von getöteten Hintergrundprozessen zu ernten. => Jetzt ist es nur noch eine der Implementierungen zu wählen. Einige portieren nur eine echte "init" in C/C++, andere machen Skripte um signal (3) und waitpid (3) in einer höheren Programmiersprache - Pythons "signal" -Standardbibliothek funktioniert auch dafür. (wie in meinem docker-systemctl-replacement script gezeigt) –

Antwort

23

Dies ist von Entwurf. Docker sollte in Ihrem Container einen Prozess im Vordergrund ausführen, der als PID 1 im PID-Namespace des Containers generiert wird. Docker ist für die Prozessisolierung konzipiert, nicht für die Betriebssystemvirtualisierung. Daher werden keine anderen Betriebssystemprozesse und -dämonen im Container ausgeführt (wie Systemd, Cron, Syslog usw.), nur Ihr Einstiegspunkt oder Befehl wird ausgeführt.

Wenn sie Systemd-Befehle enthielten, würden Sie feststellen, dass viele Dinge nicht funktionierten, da Ihr Einstiegspunkt init ersetzt. Systemd verwendet auch cgroups, die das Andockfenster innerhalb von Containern einschränkt, da die Möglichkeit, cgroups zu ändern, es einem Prozess ermöglichen kann, der Isolation des Containers zu entkommen. Ohne systemd, das als init in Ihrem Container ausgeführt wird, gibt es keinen Daemon, der Ihre Start- und Stoppbefehle verarbeitet.

+0

Es gibt keine Diskussion von irgendwelchen Ihrer Punkte in der Anleitung, die Sie verknüpft haben, so dass ich nicht sehe, wie Sie sagen können, dass es "so ziemlich die erste Note in der Tutorial "und es ist wirklich nicht hilfreich, nur auf die Titelseite der Dokumentation zu linken. Ich habe aus den Self-Paced Docker Training Videos gelernt, dass der Einstiegspunkt eines Containers PID 1 hat, also implizit verstanden, dass der Einstiegspunkt systemd ersetzt. Nachdem ich jedoch zahlreiche Abschnitte der Docker-Dokumente gelesen habe, fühle ich, dass ich noch keine vollständige und klare Erklärung gelesen habe. –

+1

Um etwas Nützliches zu tun, enthält ein Basis-Image fast immer eine Betriebsumgebung. Meines Wissens bestand der einzige Unterschied zwischen diesem und einem vollständigen Betriebssystem darin, dass es keinen Kernel hat und stattdessen den Kernel des Host-Betriebssystems verwendet. Vielleicht wird ein Wissen über Betriebssysteme vorausgesetzt. Ich bin neu in Linux. Ich brauche eine detaillierte Erklärung der Unterschiede zwischen einer regulären Ubuntu/Linux Distro Betriebsumgebung und einer Dockerized Ubuntu/Linux Distro Betriebsumgebung. –

+1

Ein weiterer Punkt ist, dass das erste Schulungsvideo zu einem selbstgesteuerten Training impliziert, dass mehrere Prozesse innerhalb eines Containers ausgeführt werden können, so dass Ihre Aussage über "keine anderen Prozesse" in einem Container zumindest teilweise ungenau ist. Vielen Dank für Ihre Antwort. –

Verwandte Themen