Problem
Es scheint systemd
nicht aktiv oder in Ubuntu Docker-Images verfügbar zu sein.
Installieren
Ich führe Docker-Container aus den ubuntu:16.04
und ubuntu:16.10
Bildern aus.
Tests
Wenn ich ausführe:
systemctl status ssh
im 16,04
Behälter
Das Ergebnis ist der Fehler Failed to connect to bus: No such file or directory
Im 16.10
Container lautet der Fehler : bash: systemctl: command not found
.
Wenn ich das which systemctl
tue, befindet sich systemctl im 16.04
Container, aber nicht im 16.10
Container.
Ich habe entdeckt, dass es /lib/systemd
existiert.
Ich habe versucht, systemd zu installieren mit:
apt-get install systemd libpam-systemd systemd-ui
Dann which systemctl
findet systemctl in16.10
systemctl status ssh
gibt aber trotzdem den fehlerFailed to connect to bus: No such file or directory
Fragen
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?
docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro <image>
undsystemctl
funktioniert einwandfreiAntworten:
Dies ist beabsichtigt. Docker sollte einen Prozess im Vordergrund Ihres Containers ausführen und dieser wird als PID 1 im PID-Namespace des Containers erzeugt. Docker wurde für die Prozessisolierung entwickelt, nicht für die Betriebssystemvirtualisierung. Daher werden im Container keine anderen Betriebssystemprozesse und Dämonen ausgeführt (wie systemd, cron, syslog usw.), sondern nur Ihr Einstiegspunkt oder Befehl, den Sie ausführen.
Wenn sie systemd-Befehle enthalten, funktionieren viele Dinge nicht, da Ihr Einstiegspunkt init ersetzt. Systemd verwendet auch cgroups, die vom Docker innerhalb von Containern eingeschränkt werden, da durch die Möglichkeit, cgroups zu ändern, ein Prozess der Isolation des Containers entgehen kann. Ohne systemd, das als init in Ihrem Container ausgeführt wird, gibt es keinen Daemon, der Ihre Start- und Stoppbefehle verarbeitet.
quelle