Ich versuche herauszufinden, ob ich systemd in einem Docker-Container ausführen kann (in dem Arch Linux ausgeführt wird).
Ich starte docker mit allen Funktionen und binde mount in cgroups:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
Wenn ich jedoch versuche, die systemd-Binärdatei auszuführen:
Trying to run as user instance, but the system has not been booted with systemd.
Der Versuch, herauszufinden, wie man Dinge korrekt in systemd einleitet, beginnt.
arch-linux
docker
systemd
Michael Neale
quelle
quelle
systemd
Manpage wäre ein guter Anfang. Google liefert auch mehrere Artikel über das Ausführen von systemd unter docker.Antworten:
Um systemd in einem Docker-Container auszuführen, muss auf dem Host- System auch systemd ausgeführt werden. Dies bedeutet, dass Sie Ubuntu nicht als Host verwenden können. Derzeit sind die einzigen mir bekannten Host-Distributionen Fedora (das im Gegensatz zu Ubuntu die neueste Version von Docker hat) oder RHEL 7.
quelle
Hier ist mein Master-Teil: D Ausführen von systemd in einem Docker-Container mit Ubuntu: D Ich habe Ubuntu dazu gebracht, mit systemd in Docker zu arbeiten
GitHub Repo für meinen Docker-System-Container
Ausgabe:
quelle
Derzeit wird systemd in einem Docker-Container aus einer ganzen Reihe von Gründen, z. B. dem Fehlen der richtigen Berechtigungen, nicht ordnungsgemäß ausgeführt. Sie können dies in einer Vielzahl von Github-Problemen im Docker-Projekt nachlesen, wie z. B. das Ausführen von systemd in Docker Arch-Containern, Hänge oder Fehler in Bezug auf die Init / Prozess-Überwachung. (Ich würde gerne mehr Themen hier verlinken, aber ich kann nicht, da ich anscheinend nicht genug Ansehen habe).
Wie Sie sehen, wird an diesem Thema gerade gearbeitet, und einige Patches wurden bereits zusammengeführt, um das Verhalten zu verbessern, sodass wir davon ausgehen können, dass dies bald funktioniert.
Anscheinend ist es einigen Entwicklern bereits gelungen, es auf Fedora-Systemen zum Laufen zu bringen, wie sie in ihrem Blog dokumentiert haben .
quelle
Sie können systemd in einem Docker-Container ausführen. Das Host-Betriebssystem spielt keine Rolle, obwohl Sie das Volume / sys / fs / cgroup des Hosts mounten müssen. Ich habe es nach diesem Leitfaden zum Laufen gebracht : http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
quelle
/sys/fs/cgroup
dem von Ihnen erwähnten Anhängen der Hosts ).Ich konnte von hier aus rückwärts arbeiten: https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 macht dies einfacher, da Groups (ro) bereits in Containern bereitgestellt wird. Ich benötige derzeit noch Privatzugriff, damit PrivateTmp-Bereitstellungen erstellt werden können. Ansonsten funktioniert es einwandfrei, solange Sie das Cmd angeben, das als Systemd-Binärdatei ausgeführt werden soll.
quelle
Ich habe diese Frage gefunden, als ich versucht habe, dies im offiziellen debian: 8-Container zu tun. Für alle anderen, die dies auf dem offiziellen debian: 8 (debian: jessie) -Container versuchen, funktioniert die Antwort von @ Frank-from-DSPEED mit einer leichten Modifikation, wie in einem älteren Git-Hub-Beitrag beschrieben :
Dann aus dem Container:
Das funktioniert bei mir perfekt und da es sich nur um eine Entwicklungsumgebung handelt, ist mir das Sicherheitsproblem egal.
Hinweis: Mit dem Befehl / sbin / init wird / sbin / init als Prozess 1 definiert. Dies ist ein wesentlicher Bestandteil dieser Funktion.
quelle
systemctl show-environment
ernährt sich für michFailed to get D-Bus connection: Unknown error -1
. Wenn ich den Container mit einem--privileged
Flag anstelle von--cap-add SYS_ADMIN
(docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
) starte, antwortet systemctl wie gewohntAb 2018 funktioniert das jetzt bei mir:
docker run -it -e container=docker
Dein-Bild-Name/sbin/init
Dies gibt Ihnen jedoch keine Shell, so dass Sie zuerst einen systemd-Dienst (z. B. sshd) im Image aktivieren müssen, wenn dies noch nicht geschehen ist, um etwas Nützliches zu tun.
quelle