Docker – débloquer une image en infinite loop

Imaginons que vous ayez trouvé une image qui corresponde à vos besoins mais vous constatez qu'elle redémarre en boucle... Car le créateur de l'image a mis un script non compatible avec votre environnement (problème de proxy, récupération d'un package sur une source ayant disparu, etc.).

Imaginons que vous ayez trouvé une image qui corresponde à vos besoins mais vous constatez qu’elle redémarre en boucle… Car le créateur de l’image a mis un script non compatible avec votre environnement (problème de proxy, récupération d’un package sur une source ayant disparue, etc.).

Solution 1 : récupérer son dockerfile (dfimage) pour la recréer

Pour ce faire, on peut utiliser l’astuce suivante :

alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 nomimage
dfimage nomimage

On peut alors récupérer le dockerfile source et le modifier pour débuguer le problème. Cependant, si vous avez la flemme de faire ça, on peut tenter la solution 2.

Exemple de retour de la commande :

Solution 2 : inhiber le script

On va tout simplement retrouver le script qui pose problème dans l’image en question via un « ps aux » par exemple :

Dans cet exemple, je remarque que le script qui tourne en boucle est lancé par /usr/bin/python2. Si je souhaite bloquer la création de ce script, il me suffit alors d’interférer sur /usr/bin/python2.

On va alors créer un config map par exemple sous Rancher (ou un bind directory si vous êtes sous Docker pur) :

Dans le fichier en question (ici le config map python2), on peut faire en sorte d’inhiber l’action (sleep infinity) :

#!/bin/bash
sleep infinity

Ensuite on monte le fichier sur le container :

Et maintenant, le script n’échouant jamais, le container ne sera plus redémarrer par docker ou rancher. Vous pourrez donc utiliser le container sans problème tout en sachant, évidemment, que le script du créateur ne sera jamais lancé. C’est donc dans le cas particulier où le script en question ne vous est d’aucune utilité.