- Utilisation des politiques de redémarrage natives de Docker pour gérer les pannes système.
- Mise en œuvre de scripts personnalisés et de tâches cron pour les conteneurs présentant des états non sains.
- Intégration avancée avec systemd pour contrôler la séquence de démarrage et d'arrêt.
- Alternatives et outils de surveillance externe tels que Podman Quadlet.
Je suis sûr que cela vous est déjà arrivé : vous avez un service qui tourne dans Docker qui, pour des raisons mystérieuses, se bloque tous les quelques jours. Comment redémarrer automatiquement un conteneur Docker lorsqu'il cesse de répondre ? C'est frustrant de tenter d'optimiser du code ou des configurations sans succès, pour finalement se rendre compte qu'un simple redémarrage manuel résout le problème et permet à tout de fonctionner pendant une semaine supplémentaire. Plutôt que de vérifier constamment l'heure, la solution idéale consiste à mettre en place un système qui effectue ces tâches fastidieuses à votre place.
La gestion de la disponibilité des conteneurs implique bien plus que de simplement s'assurer qu'ils démarrent automatiquement lorsque le serveur est mis sous tension. s'assurer qu'ils répondent correctement aux requêtes. Parfois, le conteneur apparaît comme « actif » pour Docker, mais l’application qu’il contient ne répond pas, ce qui nous oblige à rechercher des solutions allant des paramètres de démon de base à la création de services complexes dans le système d’exploitation.
Politiques de redémarrage natives Docker
La méthode la plus simple pour redémarrer automatiquement un conteneur Docker consiste à utiliser l'option `--restart`. --restart lors du lancement d'un conteneur ou de l'utilisation de la commande docker update Si le conteneur est déjà créé, Docker propose plusieurs options en fonction de vos besoins. Par exemple, la politique toujours Cela aura pour conséquence que le conteneur redémarre systématiquement, que le processus se soit terminé par une erreur ou que ce soit le démon Docker lui-même qui ait redémarré.
Si vous préférez une intervention plus chirurgicale, sauf si arrêté C'est le choix privilégié par beaucoup. Cette configuration est identique à la précédente, sauf que si vous arrêtez manuellement le conteneur pour maintenance, Docker ne tentera pas de l'activer. automatique après un redémarrage du serveur, en respectant votre décision manuelle.
Pour ceux qui ne souhaitent agir qu'en réaction à des défaillances critiques, il existe en cas de défaillanceCette politique ne déclenche un redémarrage que si le conteneur se termine avec un code de sortie différent de zéro. Vous pouvez même limiter ce nombre en définissant un nombre maximal de tentatives, ce qui empêche le système d'entrer dans une boucle de redémarrage infinie en cas d'erreur persistante et critique.

Automatisation pour les conteneurs « non sains »
C'est là que les choses deviennent intéressantes. Parfois, un conteneur apparaît toujours comme « En marche » (allumé), mais son état de santé est… malsain car il échoue aux contrôles internes. Les politiques précédentes sont inefficaces ici, car le processus n'est pas techniquement arrêté. Pour résoudre ce problème, nous pouvons mettre en œuvre la directive BILAN DE SANTÉ dans le Dockerfile ou dans le fichier Docker Compose, en définissant une commande (telle qu'une curl (à un port spécifique) pour vérifier que l'application répond.
Une fois le contrôle de santé mis en place, nous pourrons créer un Script Bash qui s'exécute toutes les quelques minutes en utilisant le crontab sous Linux. Ce script devrait filtrer les conteneurs qui sont dans un état unhealthy ou ceux qui ont quitté avec le code d'erreur 128 et ont exécuté un docker restart à leur sujet.
Pour que cela fonctionne correctement et redémarre automatiquement un conteneur Docker, il est essentiel que l'utilisateur exécutant la tâche cron dispose des autorisations nécessaires. autorisations requises dans le groupe DockerDe cette manière, le système surveille l'environnement toutes les 5 ou 10 minutes et réactive tout service devenu « zombie », garantissant une disponibilité quasi totale sans intervention humaine.
Intégration avancée avec systemd
Dans un environnement plus professionnel, vous pourriez souhaiter que vos conteneurs se comportent comme services Linux natifsIntégrer Docker Systemd vous permet de gérer des dépendances complexes, comme par exemple de garantir que la base de données démarre avant l'application web. Ceci est réalisé en créant des fichiers .service sur la route /etc/systemd/system/.
Nous pouvons concevoir un séquence d'arrêt et de mise sous tension Contrôlé. Grâce à des scripts personnalisés liés à systemd, il est possible d'arrêter les conteneurs dans l'ordre inverse de leurs dépendances afin d'éviter toute corruption de données. En utilisant le type oneshot et la configuration du targets convenable (comme multi-user.target o shutdown.target), le serveur gère l'intégralité du cycle de vie du conteneur.
Une autre option puissante pour redémarrer automatiquement un conteneur Docker lorsqu'il ne répond plus consiste à utiliser l'indicateur --rm en combinaison avec systemd. Cela permet de supprimer le conteneur à l'arrêt et d'en créer un nouveau à partir de l'image de base au démarrage, garantissant ainsi que le Le récipient doit toujours être propre et en parfait état.déléguer la persistance des données exclusivement à des volumes externes.

Outils externes et alternatives modernes
Si vous ne souhaitez pas vous embêter à écrire des scripts Bash, des outils tiers sont disponibles. Il existe des applications open source conçues spécifiquement pour redémarrer les conteneurs en fonction d'un horaire établiC'est très utile pour les tâches récurrentes telles que le renouvellement des certificats SSL. De même, des outils tels que Temps de disponibilité Kuma Ils permettent de surveiller l'état des services depuis un tableau de bord visuel et d'envoyer des notifications à Telegram ou Gotify en cas de problème. Ils sont particulièrement utiles pour redémarrer automatiquement un conteneur Docker lorsqu'il cesse de répondre.
Pour ceux qui recherchent une alternative plus légère ou locale, Podman C'est une excellente option. Grâce à son architecture sans démon et à sa fonctionnalité de QuadrupletIl permet de créer des fichiers déclaratifs simples que systemd convertit automatiquement en services optimisés, offrant une intégration beaucoup plus organique que Docker traditionnel.
La maîtrise totale du cycle de vie de vos services implique de combiner l'utilisation de Politiques de redémarrage, surveillance constante à travers bilans de santé et, dans les cas plus complexes, le soutien de outils systemd ou de surveillance afin que votre infrastructure soit robuste et ne dépende pas de la capacité de quelqu'un à redémarrer manuellement le serveur chaque semaine.
Rédacteur spécialisé dans les problématiques technologiques et Internet avec plus de dix ans d'expérience dans différents médias numériques. J'ai travaillé comme éditeur et créateur de contenu pour des sociétés de commerce électronique, de communication, de marketing en ligne et de publicité. J'ai également écrit sur des sites Web d'économie, de finance et d'autres secteurs. Mon travail est aussi ma passion. Maintenant, à travers mes articles dans Tecnobits, j'essaie d'explorer toutes les actualités et les nouvelles opportunités que le monde de la technologie nous offre chaque jour pour améliorer nos vies.