web-dev-qa-db-fra.com

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

Quelle est la bonne façon de démarrer automatiquement les conteneurs Docker au démarrage du système?

Existe-t-il un moyen préféré de le faire sur Ubuntu 14.04?

J'ai utilisé supervisord dans le passé pour démarrer automatiquement les applications Web. Mais cela ne semble pas être la bonne chose pour Docker.

115
Stefan Arentz

Apparemment, la méthode actuelle pour démarrer automatiquement les conteneurs Docker ( à partir de Docker 1.2 ) consiste à utiliser politiques de redémarrage . Cela contrôlera la manière dont Docker doit gérer le démarrage du conteneur au démarrage et le redémarrage du conteneur à sa sortie. J'ai utilisé l'option 'toujours' jusqu'à présent, et je peux confirmer que Docker démarre automatiquement le conteneur au démarrage du système:

Sudo docker run --restart=always -d myimage

Extrait de documentation

Redémarrer les stratégies En utilisant l'indicateur --restart lors de l'exécution de Docker, vous pouvez spécifier une stratégie de redémarrage pour la façon dont un conteneur doit ou non être redémarré à la sortie.

non - Ne redémarrez pas le conteneur à sa sortie.

en cas d'échec - Redémarrez le conteneur uniquement s'il se termine avec un état de sortie différent de zéro.

always - Redémarrez toujours le conteneur quel que soit l'état de sortie.

Vous pouvez également spécifier la durée maximale pendant laquelle Docker essaiera de redémarrer le conteneur lors de l'utilisation de la stratégie en cas d'échec. La valeur par défaut est que Docker essaiera indéfiniment de redémarrer le conteneur.

$ Sudo docker run --restart=always redis

Cela exécutera le conteneur redis avec une stratégie de redémarrage de toujours afin que si le conteneur se ferme, Docker le redémarre.

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

Cela exécutera le conteneur redis avec une stratégie de redémarrage en cas d'échec et un nombre maximal de redémarrages de 10. Si le conteneur redis se termine avec un état de sortie non nul plus de 10 fois de suite, Docker abandonnera la tentative de redémarrage du conteneur. La fourniture d'une limite de redémarrage maximale n'est valable que pour la stratégie en cas d'échec.

141
aknuds1

Docker a cette page qui explique comment le faire avec upstart et systemd. Je suis d'accord que cela ne semble pas être la bonne chose pour Docker. Leur solution consiste à exécuter docker start, ce qui suppose que vous avez déjà créé votre conteneur. Je pense que vous feriez soit docker run --rm dans le script upstart (en le traitant comme un tout nouveau processus et conteneur à partir d'une image) ou laissez simplement 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 un démarrage/arrêt facile des processus, mais vous obtenez cela avec le démarrage/arrêt de Docker aussi!

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

8
Lawrence Kesteloot

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

Pourquoi pas?

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

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

6
EEAA