Docker.io init.d-Skript funktioniert nicht im Startcontainer

8

Ich habe einen Container mit odoo auf dem Verzeichnis "/ opt / odoo /".

Ein Init-Skript auf "/etc/init.d/odoo-server"

%Vor%

dann tue ich

%Vor%

Wenn ich das Andockfenster mit docker starten starte, startet der odoo-server nicht, wenn ich im Andockfenster /etc/init.d/odoo-server starte starte es ok ...

Was passiert?

    
Mariano DAngelo 14.11.2014, 20:53
quelle

5 Antworten

12

Docker-Container haben normalerweise kein funktionierendes Init-System. Wenn Sie nur einen einzigen Dienst ausführen, fangen Sie einfach damit an.

Wenn Sie etwas Komplexeres benötigen, schauen Sie sich supervisord oder runit .

Container sind keine virtuellen Maschinen.

    
user2105103 14.11.2014 22:22
quelle
4

Wenn Sie nach einem Docker-Image suchen, das sich wie eine vollständige VM mit init-System verhält, werfen Sie einen Blick auf phusion basiceimage

    
Evgeny Chernyavskiy 15.11.2014 05:24
quelle
3

Jetzt habe ich den Fehler in einigen Stunden der Arbeit aufgespürt.

Der Grund für das Problem, dass start-stop-daemon , der Hauptdämon-Starter / Tester / Stopper-Tool des Debian-Systems, die Existenz eines Daemon durch Prüfung der virtuellen Soft-Link des Daemon-Prozesses in /proc/<pid>/exe (es sollte zeigen Sie auf das Binärbild des gestarteten Prozesses).

Das Problem ist nun, dass diese weiche Verknüpfung im Andockfenster standardmäßig nicht funktioniert. Dies liegt daran, dass Docker bei der Standardinstallation strenge Sicherheitsrichtlinien verwenden muss (es wird hauptsächlich zum Ausführen nicht identifizierter Software verwendet).

Es gibt viele Problemumgehungen für die Aufgabe, einige müssen die Berechtigungseinstellungen eines Containers ändern, andere nicht. Zwei Beispiele:

  • Sie ändern Ihre Init-Skripts so, dass start-stop-daemon nicht mit den Flags --test und --exec
  • verwendet wird
  • Sie starten Ihre Docker-Container, indem Sie dem Befehl --cap-add=SYS_ADMIN die Option docker run geben (keine Sorge, Ihrem Docker-Container werden keine Sysadm-Berechtigungen zugewiesen, es ist wahrscheinlich nur eine Vorsichtsmaßnahme für die produktive Nutzung)

Neben diesen funktioniert auch systemd nicht im Andockfenster, obwohl es wahrscheinlich eher ein Nachteil von Systemd ist als vom Andockfenster. Anstelle von systemd ist Neustart verwendbar.

PS .: Docker-Entwickler / Befürworter sagen oft, "Container sind keine VMs" und ähnliches. Aber in der alltäglichen Erfahrung gibt es keinen wirklich starken Unterschied zwischen den beiden, und für eine produktive Docker-Verwendung der Software wäre zumindest eine minimale Unterstützung einer VPS-ähnlichen Funktion sicherlich nützlich. Hoffentlich wird sich auch die Docker-Entwicklung in naher Zukunft auf diese Richtung konzentrieren.

    
peterh 22.09.2016 18:07
quelle
1

Ich habe festgestellt, dass der Dienst nicht gestartet wird, weil /usr/sbin/policy-rc.d einen 101-Code zurückgibt:

Siehe: Ссылка

And docker setzen es 101 in einem Container zurückgeben.

Also, ändern Sie das Skript auf Build funktioniert, können Sie eine build.sh in Dockerfile ausführen und führt das folgende Skript:

%Vor%     
Alfred Huang 18.05.2016 03:46
quelle
-4

Sieht so aus, als wäre Ihr Shebang nicht korrekt, anstelle von #! / bin / bash sollte es # sein! / bin / sh

Siehe: Ссылка

    
CihatG 16.06.2015 11:55
quelle

Tags und Links