it-swarm.com.de

systemd und systemctl in Ubuntu Docker-Images

Es scheint, dass systemd in Ubuntu Docker-Images nicht aktiv oder verfügbar ist.

Ich verwende Docker-Container mit den Images ubuntu:16.04 Und ubuntu:16.10.

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

Wenn ich which systemctl Tue, wird systemctl im Container 16.04 Gefunden, aber nicht im Container 16.10.

Ich habe festgestellt, dass /lib/systemd Existiert.

Ich habe versucht, systemd mit apt-get install systemd libpam-systemd systemd-ui Zu installieren. Dann findet which systemctl Systemctl in 16.10, Aber systemctl status ssh Gibt immer noch den Fehler Failed to connect to bus: No such file or directory Aus

Meine Hauptfrage ist: Wie können systemd und systemctl für die Verwendung in Ubuntu Docker-Images aktiviert werden?

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

Ich habe keine Dokumentation zu diesem Thema für Ubuntu/Ubuntu Docker-Images gefunden, nur Informationen zum Ubuntu-Übergang von Upstart zu systemd. Gibt es eine Dokumentation mit einer vollständigen Erklärung?

53
Duncan Gravill

Dies ist beabsichtigt. Docker sollte einen Prozess im Vordergrund in Ihrem Container ausführen und dieser wird als PID 1 im PID-Namespace des Containers erzeugt. Docker wurde für die Prozessisolierung und nicht für die Betriebssystemvirtualisierung entwickelt, sodass keine anderen Betriebssystemprozesse und -dämonen im Container ausgeführt werden (wie systemd, cron, syslog usw.), sondern nur Ihr Eintrittspunkt oder Ihr ausgeführter Befehl.

Wenn sie systemd-Befehle enthalten, werden Sie feststellen, dass viele Dinge nicht funktionieren, da Ihr Entypoint init ersetzt. Systemd verwendet auch cgroups, die vom Andockprogramm in Containern eingeschränkt werden, da die Möglichkeit, cgroups zu ändern, es einem Prozess ermöglichen kann, sich der Isolation des Containers zu entziehen. Ohne systemd, das als init in Ihrem Container ausgeführt wird, gibt es keinen Dämon, der Ihre Start- und Stoppbefehle verarbeitet.

52
BMitch