Dlaczego kontener Dockera nie uruchamia się przy skrypcie rozruchowym z uruchomionym skryptem w systemie Ubuntu 12.04?

15

Korzystając z instrukcji automatycznego uruchamiania Dockera na Linode VPS z systemem Ubuntu 12.04 i Docker 0.8.1, określony kontener nie uruchamia się przy ponownym uruchomieniu.

Po uruchomieniu jestem w stanie

~$ sudo start [service-name]

i wszystko idzie zgodnie z planem, ale chciałbym również zrestartować pojemnik po ponownym uruchomieniu.

Czy skrypt w samouczku nie jest przeznaczony do obsługi restartów?

Plik / etc / default / docker zawiera jeden wiersz:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf jest prosto ze strony dokera:

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
źródło
2
Jaka jest zawartość twojego skryptu upstart i /etc/default/docker?
Bruno Pereira

Odpowiedzi:

6

W pewnym momencie w ciągu ostatnich kilku miesięcy skrypt wstępny w samouczku został zmieniony, aby usunąć pętlę oczekującą na uruchomienie dokera. Usunąłem pętlę ze skryptów startowych, a moje pojemniki teraz ponownie uruchamiają się poprawnie po ponownym uruchomieniu.

Mój skrypt /etc/init/service-name.conf wygląda teraz tak:

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

Nie jestem pewien, co było nie tak z tą pętlą. Może wskazywał na niewłaściwy plik w moim systemie, chociaż nie wprowadziłem żadnych zmian w domyślnej instalacji dokera. Na razie cieszę się, że poprawka polegała na usunięciu kodu zamiast skomplikowanych obejść.

jody
źródło
Bardziej na początku byłoby zmienić zadanie dokera, aby emitować sygnał (uruchamiany przez dokera) i pozwolić, aby ten sygnał wyzwalał uruchamianie zadań kontenera.
MikeyB
Nie można zatrzymać kontenera w ten sposób, wydając polecenie stop service-name. Mam do czynienia z tym problemem :(
Ahmed Al Hafoudh
3

Dla każdego, kto używa Ubuntu 14.04 apt-get smak dokera. Musisz tylko zmienić skrypt startowy, aby czekał na „docker.io”, a nie „docker” w taki sposób:

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
źródło
1

Używam Ubuntu 13.10 jako hosta i miałem ten sam problem. Odkryłem, że doker instaluje skrypt rc dla dokera w /etc/init.d/dockertym samym czasie instaluje skrypt upstart na /etc/init/docker.conf. Musiałem tylko usunąć skrypt rc, /etc/init.d/dockeraby ten problem zniknął.

Mam nadzieję, że to również dla ciebie działa.

Sameer Naik
źródło
Niestety, ten nie działał dla mnie.
jody
0
DOCKER_OPTS="-r=false"

Oznacza to: Nie uruchamiaj ponownie uruchomionych wcześniej kontenerów.

Usuń -ropcję lub zmień ją na true.

MikeyB
źródło
2
Zgadza się, ale chodzi o to, aby ponownie uruchomić uchwyt obsługi początkowej, a nie demon dokera. Jeśli demon dokera uruchomi kontener przy ponownym uruchomieniu, procesem nie będzie można zarządzać przy uruchomieniu.
jody
0

/var/run/docker.sockjest gniazdem, więc musisz użyć go -Spodczas testowania istnienia:

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