Warum startet der Docker-Container unter Ubuntu 12.04 nicht beim Booten mit dem Upstart-Skript?

15

Wenn Sie Anweisungen für den automatischen Start von Docker unter Linode VPS unter Ubuntu 12.04 und Docker 0.8.1 verwenden, wird der angegebene Container beim Neustart nicht gestartet.

Einmal gebootet, kann ich

~$ sudo start [service-name]

und alles läuft wie geplant, ich möchte aber auch container nach einem neustart neu starten.

Ist das Skript im Lernprogramm nicht für Neustarts ausgelegt?

Die Datei / etc / default / docker enthält eine Zeile:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf ist direkt von der Docker-Seite:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    # Wait for docker to finish starting up first.
    FILE=/var/run/docker.sock
    while [ ! -e $FILE ] ; do
        inotifywait -t 2 -e create $(dirname $FILE)
    done
    /usr/bin/docker start -a db5e61a9afa8
end script
Jody
quelle
2
Was sind die Inhalte Ihres Upstart-Skripts und /etc/default/docker?
Bruno Pereira

Antworten:

6

Irgendwann in den letzten Monaten wurde das Upstart-Skript im Lernprogramm geändert, um die Schleife zu entfernen und auf den Start von Docker zu warten. Ich habe die Schleife aus meinen Upstart-Skripten entfernt und meine Container werden nach einem Neustart nun korrekt neu gestartet.

Mein /etc/init/service-name.conf Skript sieht jetzt so aus:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    /usr/bin/docker start -a db5e61a9afa8
end script

Ich bin nicht sicher, was mit dieser Schleife los war. Möglicherweise zeigte es auf die falsche Datei auf meinem System, obwohl ich keine Änderungen an der Standard-Docker-Installation vorgenommen habe. Im Moment bin ich nur froh, dass die Fehlerbehebung das Entfernen von Code anstelle eines komplizierten Workarounds beinhaltete.

Jody
quelle
Es wäre empörender, den Andockjob so zu ändern, dass ein Signal ausgegeben wird (Andockstart) und dieses Signal den Start der Containerjobs auslöst.
MikeyB
Sie können den Container auf diese Weise nicht stoppen, indem Sie den Befehl ausgeben stop service-name. Ich stehe vor diesem Problem :(
Ahmed Al Hafoudh
3

Für alle, die Ubuntu 14.04 verwenden, ist Docker genau das Richtige. Sie müssen nur das Startskript ändern, um auf "docker.io" und nicht "docker" wie folgt zu warten:

description "Docker startup script for yum_repo"
author "me"
start on filesystem and started docker.io
stop on runlevel [!2345]
respawn
script
  /usr/local/bin/docker start -a yum_repo_run
end script
falcon006
quelle
1

Ich benutze Ubuntu 13.10 als Host und hatte das gleiche Problem. Ich habe festgestellt, dass docker ein rc-Skript für /etc/init.d/dockerdocker installiert und gleichzeitig ein Upstart-Skript unter /etc/init/docker.conf installiert. Ich musste nur das RC-Skript entfernen, /etc/init.d/dockerdamit dieses Problem behoben wurde .

Ich hoffe, das funktioniert auch für Sie.

Sameer Naik
quelle
Leider hat dieser für mich nicht funktioniert.
Jody
0
DOCKER_OPTS="-r=false"

Dies bedeutet: Starten Sie zuvor ausgeführte Container nicht neu.

Entfernen Sie die -rOption, oder ändern Sie sie in true.

MikeyB
quelle
2
Richtig, aber der Sinn ist, dass der Container neu gestartet wird, nicht der Docker-Daemon. Wenn der Docker-Daemon den Container beim Neustart startet, kann der Prozess nicht von upstart verwaltet werden.
Jody
0

/var/run/docker.sockist eine Steckdose, die Sie -Sbeim Testen auf Existenz verwenden müssen:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
j.szwedko
quelle