⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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.

  1. 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
  2. Construisez une image à partir du Dockerfile.

    $ docker build -t startstop .
    
  3. 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...
    $
    
  4. 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
    
  5. 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.

Warning

Ne 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.

Warning

Ceux-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.