128 votes

Comment démarrer automatiquement les conteneurs Docker au démarrage du système ?

Quel est le meilleur moyen de démarrer automatiquement les conteneurs Docker au démarrage du système ?

Y a-t-il un moyen privilégié de faire cela sur Ubuntu 14.04 ?

J'ai utilisé supervisord dans le passé pour lancer automatiquement des applications web. Mais cela ne semble pas être la bonne chose pour Docker.

153voto

Motorhead Points 11

Apparemment, la méthode actuelle de démarrage automatique des conteneurs Docker ( de Docker 1.2 ) est d'utiliser politiques de redémarrage . Cela contrôlera la façon dont Docker doit gérer le démarrage du conteneur au démarrage et le redémarrage du conteneur lorsqu'il quitte le système. J'ai utilisé l'option 'always' jusqu'à présent, et je peux confirmer qu'elle permet à Docker de démarrer automatiquement le conteneur au démarrage du système :

sudo docker run --restart=always -d myimage

Extrait de la documentation

Politiques de redémarrage En utilisant le drapeau --restart sur l'exécution de Docker, vous pouvez spécifier une politique de redémarrage pour la façon dont un conteneur doit ou non être redémarrer à la sortie.

no - Ne pas redémarrer le conteneur lorsqu'il sort.

on-failure - Redémarrer le conteneur uniquement s'il sort avec un statut de non nul.

always - Redémarre toujours le conteneur, quel que soit le statut de sortie.

Vous pouvez également spécifier le nombre maximum de fois que Docker essaiera de redémarrer le conteneur lors de l'utilisation de la politique on-failure. La valeur par défaut est Docker essaiera toujours de redémarrer le conteneur.

$ sudo docker run --restart=always redis

Cela va exécuter le redis avec une politique de redémarrage de toujours, de sorte que si le conteneur sort, Docker le redémarre.

$ sudo docker run --restart=on-failure:10 redis

Ceci lancera le programme redis avec une politique de redémarrage en cas de défaillance et un nombre de maximum de 10 redémarrages. Si le conteneur redis sort avec un statut de sortie non nul non nul plus de 10 fois de suite, Docker abandonnera la tentative de redémarrage du conteneur le conteneur. Fournir une limite maximale de redémarrage n'est valable que pour l'option politique en cas de défaillance.

14 votes

"always - Toujours redémarrer le conteneur quel que soit le statut de sortie" est un peu confus. Il ne redémarrera pas le conteneur si vous quittez/arrêtez manuellement le conteneur, ce qui est le comportement que je recherchais.

14 votes

Remarque : une autre politique appelée unless-stopped a été ajouté. Il agit comme always mais si le conteneur est arrêté et que le système est redémarré ou que le démon docker est redémarré, le conteneur ne redémarrera pas. Voir ici pour une description détaillée des 4 options. blog.codeship.com/

5 votes

Bien sûr, le docker doit se lancer automatiquement pour prendre en charge cette fonction.

10voto

Docker a cette page qui explique comment le faire avec upstart et systemd. Je suis d'accord que ça ne semble pas être la bonne chose pour Docker. Leur solution consiste à exécuter docker start qui suppose que vous avez déjà créé votre conteneur. Je pense que vous devriez soit faire docker run --rm dans le script upstart script (le traitant comme un tout nouveau processus et conteneur à partir d'une image) ou simplement laisser le démon docker redémarrer les conteneurs lui-même au démarrage (comme il le fera par défaut si vous ne faites rien d'autre). Upstart a l'avantage de permettre le démarrage et l'arrêt facile des processus, mais vous obtenez cela avec le démarrage et l'arrêt de docker aussi !

Je pense que c'est bizarre de forcer l'utilisateur à créer manuellement un conteneur (avec toutes les liaisons correctes de port/volume) avant que le script de démarrage ne fonctionne.

0 votes

Le lien est cassé... Ce site semble être un remplacement possible, mais il ne montre certainement pas "comment"

0 votes

Merci, j'ai corrigé le lien vers une page similaire, mais je ne peux pas être sûr qu'elle dise la même chose que l'originale.

6voto

Samat Jain Points 165

Mais cela ne semble pas être la bonne chose pour Docker.

Pourquoi pas ?

J'utilise Supervisord pour cela avec beaucoup de succès.

Utilisez ce que vous connaissez, utilisez ce qui fonctionne, utilisez quelque chose que vous pouvez facilement entretenir et comprendre.

0 votes

Merci @EEAA cela signifie-t-il que vous les exécutez en mode non-daemon ? Cela ne signifie-t-il pas aussi que vous devez les exécuter avec --rm ?

0 votes

J'exécute les conteneurs en mode avant-plan et je laisse supervisord attraper stdout/stderr. Je ne suis pas sûr de savoir pourquoi --rm est pertinente ici.

0 votes

@EEAA : à propos de votre question : Pour certaines personnes, docker est un remplacement pour lxc o openvz qui ont lxc.start.auto = 1 y vzctl set --onboot yes . ESXi et d'autres solutions de virtualisation disposent également d'une telle fonction. Comme Lawrence, je ne pense pas non plus qu'une telle fonction de démarrage automatique doive être implémentée de manière spécifique à une distribution, car un utilisateur de Docker devrait être capable de résoudre le même problème avec les mêmes connaissances sur toutes les plateformes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X