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

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ść.


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

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.