Démarrer automatiquement les conteneurs
Docker fournit des politiques de redémarrage pour contrôler si vos conteneurs démarrent automatiquement lorsqu'ils se ferment, ou quand Docker redémarre. Les politiques de redémarrage démarrent les conteneurs liés dans le bon ordre. Docker recommande d'utiliser les politiques de redémarrage, et d'éviter d'utiliser des gestionnaires de processus pour démarrer les conteneurs.
Les politiques de redémarrage sont différentes du drapeau --live-restore
de la commande dockerd
.
Utiliser --live-restore
vous permet de garder vos conteneurs en cours d'exécution pendant
une mise à jour Docker, bien que le réseau et l'entrée utilisateur soient interrompus.
Utiliser une politique de redémarrage
Pour configurer la politique de redémarrage d'un conteneur, utilisez le drapeau --restart
lors de l'utilisation de la commande docker run
. La valeur du drapeau --restart
peut être
l'une des suivantes :
Drapeau | Description |
---|---|
no |
Ne pas redémarrer automatiquement le conteneur. (Par défaut) |
on-failure[:max-retries] |
Redémarrer le conteneur s'il se ferme en raison d'une erreur, qui se manifeste par un code de sortie non-zéro. Optionnellement, limiter le nombre de fois que le daemon Docker tente de redémarrer le conteneur en utilisant l'option :max-retries . La politique on-failure ne provoque un redémarrage que si le conteneur se ferme avec un échec. Elle ne redémarre pas le conteneur si le daemon redémarre. |
always |
Toujours redémarrer le conteneur s'il s'arrête. S'il est arrêté manuellement, il est redémarré seulement quand le daemon Docker redémarre ou que le conteneur lui-même est redémarré manuellement. (Voir la seconde puce listée dans détails des politiques de redémarrage) |
unless-stopped |
Similaire à always , sauf que lorsque le conteneur est arrêté (manuellement ou autrement), il n'est pas redémarré même après le redémarrage du daemon Docker. |
La commande suivante démarre un conteneur Redis et le configure pour toujours redémarrer, sauf si le conteneur est explicitement arrêté, ou que le daemon redémarre.
$ docker run -d --restart unless-stopped redis
La commande suivante change la politique de redémarrage pour un conteneur déjà en cours d'exécution
nommé redis
.
$ docker update --restart unless-stopped redis
La commande suivante s'assure que tous les conteneurs en cours d'exécution redémarrent.
$ docker update --restart unless-stopped $(docker ps -q)
Détails des politiques de redémarrage
Gardez les points suivants à l'esprit lors de l'utilisation des politiques de redémarrage :
-
Une politique de redémarrage ne prend effet qu'après qu'un conteneur démarre avec succès. Dans ce cas, démarrer avec succès signifie que le conteneur est en marche pendant au moins 10 secondes et que Docker a commencé à le surveiller. Cela empêche un conteneur qui ne démarre pas du tout d'entrer dans une boucle de redémarrage.
-
Si vous arrêtez manuellement un conteneur, la politique de redémarrage est ignorée jusqu'à ce que le daemon Docker redémarre ou que le conteneur soit redémarré manuellement. Cela empêche une boucle de redémarrage.
-
Les politiques de redémarrage ne s'appliquent qu'aux conteneurs. Pour configurer les politiques de redémarrage pour les services Swarm, voir drapeaux liés au redémarrage de service.
Redémarrer les conteneurs en premier plan
Lorsque vous exécutez un conteneur en premier plan, arrêter un conteneur cause aussi la sortie de la CLI attachée, indépendamment de la politique de redémarrage du conteneur. Ce comportement est illustré dans l'exemple suivant.
-
Créez un Dockerfile qui affiche les nombres de 1 à 5 puis se ferme.
FROM busybox:latest COPY --chmod=755 <<"EOF" /start.sh echo "Démarrage..." for i in $(seq 1 5); do echo "$i" sleep 1 done echo "Fermeture..." exit 1 EOF ENTRYPOINT /start.sh
-
Construisez une image à partir du Dockerfile.
$ docker build -t startstop .
-
Exécutez un conteneur à partir de l'image, en spécifiant
always
pour sa politique de redémarrage.Le conteneur affiche les nombres 1..5 vers stdout, puis se ferme. Cela cause aussi la sortie de la CLI attachée.
$ docker run --restart always startstop Démarrage... 1 2 3 4 5 Fermeture... $
-
Exécuter
docker ps
montre qu'il est toujours en cours d'exécution ou redémarre, grâce à la politique de redémarrage. La session CLI a déjà quitté, cependant. Elle ne survit pas à la fermeture initiale du conteneur.$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 081991b35afe startstop "/bin/sh -c /start.sh" 9 seconds ago Up 4 seconds gallant_easley
-
Vous pouvez re-attacher votre terminal au conteneur entre les redémarrages, en utilisant la commande
docker container attach
. Il est détaché à nouveau la prochaine fois que le conteneur se ferme.$ docker container attach 081991b35afe 4 5 Fermeture... $
Utiliser un gestionnaire de processus
Si les politiques de redémarrage ne conviennent pas à vos besoins, comme lorsque des processus en dehors de Docker dépendent des conteneurs Docker, vous pouvez utiliser un gestionnaire de processus tel que systemd ou supervisor à la place.
WarningNe combinez pas les politiques de redémarrage Docker avec des gestionnaires de processus au niveau de l'hôte, car cela crée des conflits.
Pour utiliser un gestionnaire de processus, configurez-le pour démarrer votre conteneur ou service en utilisant
la même commande docker start
ou docker service
que vous utiliseriez normalement pour
démarrer le conteneur manuellement. Consultez la documentation pour le gestionnaire
de processus spécifique pour plus de détails.
Utiliser un gestionnaire de processus à l'intérieur des conteneurs
Les gestionnaires de processus peuvent aussi s'exécuter dans le conteneur pour vérifier si un processus est en cours d'exécution et le démarrer/redémarrer si ce n'est pas le cas.
WarningCeux-ci ne sont pas conscients de Docker, et surveillent seulement les processus du système d'exploitation dans le conteneur. Docker ne recommande pas cette approche, car elle est dépendante de la plateforme et peut différer entre les versions d'une distribution Linux donnée.