docker - comment désactiver le redémarrage automatique sur un conteneur?

157

Je peux activer le redémarrage automatique avec --restart=always, mais après avoir arrêté le conteneur, comment désactiver cet attribut?

Je lance normalement un serveur Web et mappe généralement le port 80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

Mais il y a des moments où je veux exécuter une version plus récente de mon image, mais je veux conserver l'ancien conteneur. Le problème est que s'il y a plusieurs conteneurs avec --restart=always, un seul d'entre eux (aléatoire?) Démarre car ils sont tous en compétition pour le port 80 sur l'hôte.

Brad Grissom
la source

Réponses:

329

Vous pouvez utiliser l' --restart=unless-stoppedoption, comme @Shibashis l'a mentionné, ou mettre à jour la politique de redémarrage (cela nécessite docker 1.11 ou plus récent);

Consultez la documentationdocker update et les politiques de redémarrage de Docker .

docker update --restart=no my-container

qui met à jour la politique de redémarrage pour un conteneur existant ( my-container)

thaJeztah
la source
69
Utilisez docker update --restart=no $(docker ps -a -q)pour mettre à jour tous vos conteneurs :-)
Mark Mooibroek
33

Vous pouvez démarrer votre conteneur avec --restart=unless-stopped.

Shibashis
la source
23

Utilisez ce qui suit pour désactiver TOUS les conteneurs à redémarrage automatique (démon).

docker update --restart=no $(docker ps -a -q)

Utilisez ce qui suit pour désactiver le redémarrage d'un seul conteneur.

docker update --restart=no the-container-you-want-to-disable-restart

Rationnel :

Docker fournit des stratégies de redémarrage pour contrôler si vos conteneurs démarrent automatiquement lorsqu'ils se terminent ou lorsque Docker redémarre. Ceci est souvent très utile lorsque Docker exécute un service clé.

Remarques

Si vous utilisez docker-compose, il peut être utile de le savoir.

restart no est la stratégie de redémarrage par défaut et ne redémarre en aucun cas un conteneur. Lorsque always est spécifié, le conteneur redémarre toujours. La stratégie en cas de panne redémarre un conteneur si le code de sortie indique une erreur en cas de panne.

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always
VolerV
la source
12

Si un essaim redémarre les conteneurs, l'essaim redémarrera tous les conteneurs que vous arrêtez ou rm, quelle que soit l'option de redémarrage. C'est une fonctionnalité, pas un bug.

Assurez-vous que vous n'exécutez pas un service que vous avez oublié:

docker service ls

Ensuite, vous pouvez arrêter le service

docker service rm <service id discovered with previous command>
nachbar
la source
1
lsrésultats en erreurError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa