Pourquoi le conteneur Docker ne démarre-t-il pas au démarrage avec un script de démarrage sur Ubuntu 12.04?


15

En utilisant les instructions pour le démarrage automatique de Docker sur Linode VPS exécutant Ubuntu 12.04 et Docker 0.8.1, le conteneur spécifié ne démarre pas au redémarrage.

Une fois démarré, je peux

~$ sudo start [service-name]

et tout se passe comme prévu, mais je voudrais également que le conteneur redémarre après un redémarrage.

Le script du didacticiel n'est-il pas conçu pour gérer les redémarrages?

Le fichier / etc / default / docker contient une ligne:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf est directement issu de la page d'accueil:

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
Quel est le contenu de votre script parvenu et /etc/default/docker?
Bruno Pereira

Réponses:


6

À un moment donné au cours des deux derniers mois, le script parvenu dans le didacticiel a été modifié pour supprimer la boucle en attendant le démarrage de Docker. J'ai supprimé la boucle de mes scripts de démarrage et mes conteneurs redémarrent désormais correctement après un redémarrage.

Mon script /etc/init/service-name.conf ressemble maintenant à ceci:

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

Je ne sais pas ce qui n'allait pas avec cette boucle. Peut-être qu'il pointait vers le mauvais fichier sur mon système, même si je n'ai apporté aucune modification à l'installation par défaut du docker. Pour l'instant, je suis juste heureux que le correctif implique la suppression de code au lieu de certaines solutions compliquées.


Il serait plus simple de changer le travail de docker pour émettre un signal (démarré par le docker) et que ce signal déclenche le démarrage des travaux de conteneur.
MikeyB

Vous ne pouvez pas arrêter le conteneur de cette façon en émettant une commande stop service-name. Je suis confronté à ce problème :(
Ahmed Al Hafoudh

3

Pour tous ceux qui utilisent ubuntu 14.04 apt-get, saveur de docker. Vous avez juste besoin de changer le script de démarrage pour attendre sur "docker.io" et non sur "docker" comme ceci:

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

J'utilise Ubuntu 13.10 comme hôte et j'ai eu le même problème. J'ai trouvé que docker installe un script rc pour docker dans /etc/init.d/dockeret installe en même temps un script upstart à /etc/init/docker.conf. J'ai juste dû supprimer le script rc /etc/init.d/dockerpour que ce problème disparaisse.

J'espère que cela fonctionne aussi pour vous.


Malheureusement, celui-ci n'a pas fonctionné pour moi.
jody

0
DOCKER_OPTS="-r=false"

Cela signifie: Ne redémarrez pas les conteneurs en cours d'exécution.

Supprimez l' -roption ou changez-la en true.


2
D'accord, mais le but est d'avoir un redémarrage du conteneur de poignée upstart, pas le démon docker. Si le démon docker démarre le conteneur au redémarrage, le processus ne peut pas être géré par upstart.
jody

0

/var/run/docker.sockest une socket que vous devez utiliser -Slors du test d'existence:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.