Apparemment, la méthode actuelle pour démarrer automatiquement les conteneurs Docker (à partir de Docker 1.2 ) consiste à utiliser des stratégies de redémarrage . Cela contrôlera la manière dont Docker doit gérer le démarrage du conteneur lors du démarrage et le redémarrage du conteneur lors de sa sortie. Jusqu'ici, j'ai utilisé l'option 'toujours' et peux confirmer que Docker lance automatiquement le conteneur au démarrage du système:
Redémarrer les stratégies À l'aide de l'indicateur --restart sur l'exécution de Docker, vous pouvez spécifier une stratégie de redémarrage indiquant comment un conteneur doit ou non être redémarré à la sortie.
non - Ne redémarre pas le conteneur à sa sortie.
on-failure - Redémarrez le conteneur uniquement s'il se ferme avec un statut de sortie non nul.
always - Toujours redémarrer le conteneur, quel que soit le statut de sortie.
Vous pouvez également spécifier le nombre maximal de fois où Docker tentera 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 définitivement de redémarrer le conteneur.
$ sudo docker run --restart=always redis
Cela va exécuter le conteneur redis avec une politique de redémarrage de toujours afin que, si le conteneur se ferme, Docker le redémarre.
$ sudo docker run --restart=on-failure:10 redis
Le conteneur redis sera exécuté avec une stratégie de redémarrage après échec et un nombre de redémarrages maximal de 10. Si le conteneur redis se ferme avec un statut de sortie non nul plus de 10 fois de suite, Docker abandonnera en essayant de le redémarrer. La fourniture d'une limite de redémarrage maximale n'est valide que pour la stratégie en cas d'échec.
unless-stopped
été ajoutée. Il agit commealways
mais si le conteneur est arrêté et le système est redémarré ou le démon docker est redémarré, le conteneur ne redémarre pas. Voir ici pour une bonne rédaction de toutes les 4 options blog.codeship.com/…docker
démon doit démarrer automatiquement pour prendre en charge cette opération.Docker a cette page qui explique comment procéder avec upstart et systemd. Je conviens 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 penserais que vous feriez soitdocker run --rm
dans le script upstart (en le traitant comme un tout nouveau processus et conteneur à partir d'une image) ou tout simplement en laissant le démon docker redémarrer les conteneurs lui-même au démarrage (comme par défaut si vous ne faites rien d'autre ) Upstart a l'avantage de permettre un démarrage / un arrêt facile des processus, mais vous obtenez cela aussi avec le démarrage / arrêt de docker!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 de mise à jour ne fonctionne.
la source
Pourquoi pas?
J'utilise supervisord pour cela avec un grand succès.
Utilisez ce que vous savez, utilisez ce qui fonctionne, utilisez quelque chose que vous pouvez facilement maintenir et comprendre.
la source
--rm
?--rm
est pertinent ici.docker
est un remplacement pourlxc
ouopenvz
qui ontlxc.start.auto = 1
etvzctl set --onboot yes
. ESXi et d'autres solutions de virtualisation incluent également une telle fonctionnalité. Comme Lawrence, je ne pense pas non plus qu'une telle fonctionnalité de démarrage automatique devrait être mise en œuvre de manière spécifique à la distribution, car un utilisateur de docker devrait pouvoir résoudre le même problème avec les mêmes connaissances sur chaque plate-forme.