Ich habe das Docker-Image installiert und ein Image erfolgreich erstellt.
Wenn ich per SSH in den Container klicke und den Befehl service xxx start
starte, erscheint ein Fehler:
Dienst nginfra Start
Umleiten nach / bin / systemctl Starten Sie nginfra.service / sbin / service: Zeile 79: / bin / systemctl: Keine solche Datei oder Verzeichnis
Tatsächlich ist fakesystemd
im Container installiert und nicht in systemd
.
Also habe ich fakesystemd
entfernt und systemd
mit dem Befehl installiert:
yum swap - entferne fakesystemd - installiere systemd systemd-libs
Aber ich kann den Dienst immer noch nicht starten:
Dienst nginfra Start
Umleitung zu / bin / systemctl start nginfra.service Fehler beim Abrufen D-Bus Verbindung: Keine Verbindung zum Service Manager.
Hat sich jemals jemand getroffen und dieses Problem gelöst?
Ich habe es geschafft, dieses Problem in einem CentOS: 7 Docker Container zu beheben. Ich habe hauptsächlich das Handbuch zum CentOS Docker Image-Projekt gefolgt.
> %Vor% Erstellen Sie nun das Image und führen Sie es mit mindestens den folgenden Argumenten in docker run
command: -v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro
Dann ist der Hauptpunkt, dass /usr/sbin/init
der erste Prozess innerhalb des Docker-Containers sein muss.
Wenn Sie also ein benutzerdefiniertes Skript verwenden möchten, das einige Befehle ausführt, bevor Sie /usr/sbin/init
ausführen, starten Sie es am Ende Ihres Skripts mit exec /usr/sbin/init
(in einem Bash-Skript).
Hier ist ein Beispiel:
%Vor% Und hier ist der Inhalt von cmd.sh
:
Sie könnten System is booting up. See pam_nologin(8)
haben, wenn Sie das PAM-System verwenden, löschen Sie in diesem Fall /usr/lib/tmpfiles.d/systemd-nologin.conf
in Ihrem Dockerfile
, weil es die Datei /var/run/nologin
erzeugt, die diesen spezifischen Fehler erzeugt.
Dies ist bekanntes Problem mit systemd
-basierten Betriebssystemen in Docker-Containern.
Kurze Antwort: Zusätzlich zum Ersetzen von fakesystemd
durch systemd
müssen Sie /sys/fs/cgroup
als schreibgeschütztes Volume an den Container anhängen, das Image erstellen und dann im "privilegierten" Modus ausführen.
Dies ist der beste Leitfaden, den ich dafür gefunden habe . Es verwendet Centos als Beispiel, sollte aber mit jedem systemd
-basierten Betriebssystem arbeiten.