Comment redémarrer un existant conteneur Docker dans restart=“toujours” mode?
Lors de la première exécution d'un conteneur Docker à partir d'une image vous pouvez spécifier l'option:
--restart="always"
Cela garantit que le conteneur est toujours repris par le démon Docker si, pour une raison quelconque, il s'arrête. Donc, vous pourriez exécuter un conteneur comme ça:
docker run --restart="always" <IMAGE>
Aussi, vous pouvez redémarrer un existant conteneur Docker en spécifiant son numéro du conteneur, c'est à dire:
docker start <CONTAINER ID>
Cependant je ne peux pas déterminer si il est possible de changer un conteneur existant, qui à l'origine n'a pas été exécutée avec le --restart="always
option, pour le convertir en redémarrez toujours dans l'avenir.
Actuellement, la seule façon que je peux penser pour ce faire est de sauver le conteneur en tant que nouvelle image et ensuite l'exécuter cette image comme un nouveau conteneur avec le --restart="always"
option. Serait-ce en fait être la bonne façon de le faire?
MODIFIER: Ce que je n'avait peut-être pas faire assez clair à l'origine, c'est que je pense à propos de la situation où il y a eu des changements dans le conteneur depuis qu'il a été à l'origine, qui doivent être conservées. Donc, juste de l'exécution d'un nouveau conteneur de l'image d'origine ne serait pas suffisant.
- Plus ou moins de doublons: stackoverflow.com/questions/26852321/...
Vous devez vous connecter pour publier un commentaire.
Nous avons maintenant docker mise à jour, qui permet de changer le redémarrage de la politique de l'exécution d'un conteneur.
Il y a trois autres options:
Veuillez vous référer à la lien pour plus de détails.
Ok, donc pour répondre à ma propre question, il semble qu'il n'est pas possible de redémarrer le même conteneur avec
--restart=always
, parce que c'est quelque chose que vous avez à faire lorsque vous exécuter un conteneur pour la première fois et pas un paramètre que vous pouvez utiliser lorsque vous commencer un conteneur existant.Il y a trois solutions de rechange visant à ceci:
docker rm <CONTAINER ID>
pour ranger). Ensuite il suffit de lancer un nouveau conteneur de l'image d'origine précisant le-restart=always
option cette fois.Si pas de volumes ont été utilisés, afin que les changements internes du conteneur, vous devez vous engager le conteneur à une nouvelle image, puis exécutez un nouveau conteneur à partir de cette image.
docker commit <CONTAINER ID> <NEW IMAGE NAME>
docker run -d --restart=always ... <NEW IMAGE NAME>
Si les volumes ont été utilisés et toutes les modifications sont limitées à l'volumes, alors vous pouvez exécuter un deuxième récipient avec le
--volumes-from
paramètre sans avoir à engager une nouvelle version de l'image. c'est à diredocker stop <CONTAINER 1 NAME>
docker run -d --restart=always --volumes-from <CONTAINER 1 NAME> ... <ORIGINAL IMAGE NAME>
Il serait alors préférable de supprimer le Conteneur 1, les volumes ne seront pas supprimés, tandis qu'un autre récipient continue de les utiliser.
Je pense qu'il y a une quatrième possibilité aussi; si vous avez utilisé un volume(s) et vous savez qu'il y a eu des changements sur le conteneur qui ne sont pas sur le volume, alors vous aurez à utiliser une combinaison de (2) et (3).
Mise à jour: Cette travaillé pour activer le redémarrage. Mais la mise en revenir à pas et il retombe toujours et le conteneur recommence! 🙁 Je vais laisser cette réponse ici au cas où quelqu'un les chiffres de comment cela fonctionne vraiment. Je dois être proche!!!!
Les gens, j'ai trouvé le plus hacky solution qui permet de contourner la copie de conteneurs, etc.
De la recherche pour "RestartPolicy". Est réglé à "non", "toujours", etc
Peut-être quelqu'un pourrait étirable dans un script!?
De toute façon, ce morceau de json avec la config.json vous permettra de modifier toutes sortes de choses que vous avez manqué lors de la création de votre conteneur.
extrait de http://www.brandpending.com/blog/2014/11/21/setting-and-re-setting-the-restart-behaviour-of-a-docker-container