Comment gérer et désactiver le démarrage automatique des conteneurs Docker ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment désactiver et gérer l’auto-démarrage des conteneurs Docker au démarrage de l’hôte.
Si vous utilisez souvent Docker pour des tests, pour apprendre ou même à plus grande échelle, vous avez surement remarqué que certains de vos conteneurs Docker se lancent au démarrage de votre hôte. Cela peut être ce que vous souhaitez s’il s’agit d’un environnement de production dédié à l’exécution de conteneurs. Cependant, dans certains cas, le démarrage automatique des conteneurs peut avoir plusieurs impacts négatifs et non souhaités :
- Consommation inutile de ressources : les conteneurs lancés exécutent des processus et même s’ils ne sont pas sollicités activement, consomment des ressources de l’hôte.
- Sécurité : en fonction des configurations de vos conteneurs, ceux-ci peuvent exposer des services sur le réseau. S’ils ne sont pas sécurisés, ils peuvent ouvrir des accès non désirés à votre hôte sans que vous le sachiez.
Nous allons voir comment rapidement vérifier la configuration de vos conteneurs Docker et activer ou désactiver le lancement automatique de ces derniers.
II. Docker : qu’est-ce que la restart policy ?
Sous Docker, la restart policy est la politique (ou configuration) qui concerne les conditions de démarrage et redémarrage d’un conteneur. Avant tout, elle permet de gérer le comportement d’un conteneur en cas de crash de ce dernier ou de (re)démarrage du service Docker lui-même.
Au lancement manuel d’un conteneur, la restart policy est par défaut à , cela signifie qu’un conteneur Docker n’est pas configuré pour démarrer automatiquement au démarrage de l’hôte ou du service Docker. Les valeurs existantes pour l’option qui gère cette politique sont les suivantes :
- [nombre maximal de tentatives]
Ces différentes valeurs possibles sont assez explicites. On soulignera juste que le indique que le conteneur doit redémarrer uniquement en cas d’erreur (crash) et le est similaire à (toujours) sauf s’il s’agit d’un arrêt intentionnel du conteneur par l’utilisateur.
Si vous observez un conteneur qui se lance au démarrage du service Docker (et donc de l’hôte qui l’exécute), c’est qu’il a été explicitement configuré pour le faire lors de sa création. Si vous êtes passé par un fichier (commande ), vous trouverez surement une instruction telle que celle-ci à l’intérieur :
Ici, mes deux conteneurs sont configurés pour démarrer au lancement du service Docker, ce qui revient à les avoir lancés avec les options suivantes :
Pour en savoir plus sur les détails et les subtilités de cette politique de redémarrage, je vous oriente vers la Documentation officielle Docker :
III. Gérer la restart policy d’un conteneur Docker
A. Relever la restart policy avec docker inspect
Dans un premier temps, relevons la liste de nos conteneurs (actifs ou stoppés) :
J’en ai ici trois, notez bien les ID des conteneurs que vous souhaitez traiter. Nous allons ensuite utiliser pour relever un paramètre précis de ces derniers : la politique de redémarrage.
Le résultat est assez clair. Parmi mes 3 conteneurs Docker, deux sont à et un à . Le conteneur est donc configuré pour redémarrer en cas de crash, mais aussi au démarrage/redémarrage du service Docker (donc, de l’hôte aussi).
Si vous n’avez qu’un ou deux conteneurs à analyser, cela peut être assez rapide. Mais si vous en avez des dizaines, cela peut être assez long. Je vous propose donc la commande suivante qui permet de récupérer la politique de redémarrage du tous vos conteneurs d’un seul coup :
Cette commande utilise une boucle basée sur la sortie de la commande . Cette dernière renvoie les ID de tous les conteneurs créés sur l’hôte. Ces ID sont ensuite utilisés pour alimenter la commande vue précédemment. Vous avez donc en retour l’ID (format long), le nom du conteneur et sa politique de redémarrage.
B. Activer/Désactiver l’auto-start des conteneurs
Si vous êtes dans le cas d’un lancement de conteneur Docker et que vous souhaitez définir dès le début son comportement de redémarrage, il vous faut utiliser l’option au lancement (commande ) :
N’oubliez pas, vous pouvez utiliser les valeurs , , ou pour cette option.
Dans le cas d’un conteneur déjà créé (qu’il soit stoppé ou en cours d’exécution), nous pouvons utiliser la commande , qui permet de modifier à la volée certaines configurations des conteneurs. Par exemple, je souhaite modifier la politique de redémarrage du conteneur identifié comme étant en précédemment :
Je viens de passer sa politique de redémarrage à , nous pouvons ensuite confirmer ce changement avec la commande vue précédemment :
Et voilà, si vous voulez faire le test jusqu’au bout, redémarrez votre hôte (ou plus simplement, votre service Docker) pour ensuite constater que votre conteneur n’a pas démarré !
IV. Conclusion
J’espère que cette astuce rapide vous aidera à mieux comprendre le comportement de vos conteneurs.
L’essentiel à retenir sont la commande , le rôle de la politique de démarrage et le fait que par défaut, les conteneurs ne sont pas configurés pour démarrer tous seuls. Si tel est le cas, regardez dans votre ou vos options de lancement et recherchez l’instruction qui peut avoir été paramétrée pour changer ce comportement par défaut.
N’hésitez pas à nous indiquer dans les commentaires si ce tutoriel vous a été utile et si vous souhaitez voir ce sujet plus souvent abordé sur IT-Connect !