2015-01-20 3 views
7

Ich versuche, ein System in Docker, das viele init und upstart-Dienste hat, zu starten, und ich bekomme diesen Fehler.Laufende Dienste (upstart/init.d) in einem Container

Alle Problemumgehungen schlagen vor, eine harte Verbindung zu/bin/true herzustellen, um den Fehler zu unterdrücken. Aber ich muss diese Dienste von Emporkömmling für Neustart-Fähigkeit verwaltet und für Emporkömmlinge emittieren Ereignisse zu arbeiten ...

Da es scheint, Docker nicht unterstützt dies, überlege ich die grobe hack des Schreibens eines Skripts zu starten alle Dienste in /etc/rcX.d und verfolgen Sie die PIDs. Das löst nicht das Fehlen von Emit-Ereignissen vom Emporkömmling.

Haben Sie noch weitere Ideen, wie Sie in Docker Upstart-Prozesse starten können?

+1

Die Philosophie von Docker ist ein Prozess ausgeführt, wenn Sie mehrere ausführen möchten, haben einen Blick auf Supervisor https://docs.docker.com/articles/using_supervisord/ – user2915097

+0

Supervisor meist gleichwertig scheint, wenn nicht ein Teilmenge, von Emporkömmling, aber danke für den Zeiger; es müsste vielleicht tun. Angesichts eines großen Legacy-Systems von Init-Skripten ist es nicht ideal, sie zu konvertieren und nicht als einzelne Andockfenster auszuführen. –

Antwort

3

Sie sollten auf jeden Fall in der Lage sein, das zu tun. Es ist wirklich nicht so wie "Docker Way", aber es ist sehr möglich. Vielleicht möchten Sie einfach das phusion/baseimage Basisbild verwenden, es hat Unterstützung für runit eingebaut. Wenn Sie lieber upstart verwenden, schauen Sie sich einfach an, wie sie den Einstiegspunkt implementiert haben, , und folgen Sie diesem.

11

Leider funktioniert der Emporkömmling nicht innerhalb eines Andock-Containers, weil er mit dem init-System etwas magisch macht.

Dieses issue erklärt:

Wenn Ihre Anwendung Emporkömmling verwendet, dies wird nicht passen gut in nackten Docker Bilder und noch mehr, wenn sie ablenken/sbin/init oder /sbin/initctl um so etwas wie/bin/true oder/dev/null. Ihre Anwendung kann den Dienst verwenden, um zu starten, wenn dieser eine Old School SystemV Initscript hat und wenn der Befehl initctl nicht umgeleitet wurde.

Im Fall von Salz-Minion, auf Ubuntu die Verpackung verwendet einen Emporkömmling Job und keine klassischen Init-Skript, so ist es normal, dass es in beiden Fällen nicht starten wird.

Und this one sagt:

Da Docker den Standard/sbin/init mit seinen eigenen ersetzt, gibt es keine Möglichkeit, die Upstart laufen init in einem Container Docker.