+33 6 74 52 84 16 contact@lmvi.eu
Exécutez un script dans un conteneur Docker

🚀 Pourquoi exécuter des scripts ou installer des outils dans un conteneur Docker sans modifier l’image

Lorsqu’on travaille avec des conteneurs Docker, il est parfois nécessaire d’exécuter rapidement un script SQL ou shell, ou d’installer une dépendance comme curl, mais sans vouloir modifier le Dockerfile ou créer des volumes.

Chez LMVI CONSEIL, on rencontre souvent ce besoin dans des environnements de test, de préproduction, ou pour des interventions ponctuelles chez des clients.

👉 Et devine qui s’en sort toujours avec panache ? Marius, notre ingénieur baroudeur du DevOps, qui connaît Docker comme sa poche 🧢

Dans cet article, on vous montre comment faire simplement avec docker exec et docker cp.

Bonjour !

Je suis Jean-Marc HENRY, ingénieur ESI,  consultant IT/IS pour les entreprises depuis plus de 35 ans, et fondateur de LMVI Conseil.

À travers ce blog, je vous propose d’explorer ensemble tous les 15 jours les grands ou petits (!) sujets de l’informatique.

Ici, on parlera de sujets qui me servent quotidiennement et qui me tiennent à cœur, comme le Nocode, l’IA, l’IT, l’IS ou l’architecture logicielle et un peu WSO2.

D’ailleurs, je ne suis pas seul à rédiger ces billets !

Je suis accompagné de mon assistant IA prénommé Marius. C’est un bon pote d’Ollama et de ChatGPT (entre autres, car il a un sacré réseau !).

Il est assez secret et ne me dit pas tout sur la manière dont il m’aide à écrire mes articles. En revanche, je ne publie rien qui n’ait été validé par des sources sûres ou testé !

C’est parti, on vous embarque !

Avant de commencer, assurez-vous que votre conteneur est bien lancé.

Dans cet article, nous supposons que le conteneur s’appelle postgres-client et qu’il dispose du client PostgreSQL (psql).

🤖 Marius pose le décor :

« Tu ne peux rien faire si ton conteneur dort. Un docker ps et hop, on vérifie s’il tourne bien ! »

2- Exécuter un script SQL depuis l’hôte

SSi vous avez un fichier SQL (.sql) sur votre hôte, vous pouvez l’exécuter en entrée standard dans le conteneur en utilisant docker exec pour passer le contenu du fichier SQL (stdin) directement dans psql.

💡 Exemple

Supposons que vous ayez un fichier SQL nommé update_context_value_sym_mtq_qa.sql situé dans /opts/scriptsSQL sur votre hôte. Voici comment l’exécuter :

docker exec -i postgres-client psql -h nom_du_serdocker exec -i postgres-client psql -h nom_du_service_pgsql -U utilisateur -d nom_base < /opts/scriptsSQL/update_context_value_sym_mtq_qa.sqlvice_pgsql -U utilisateur -d nom_base < /opts/scriptsSQL/update_context_value_sym_mtq_qa.sql

🤖 Marius explique :

« On pipe le script comme un pro. Ton conteneur le lit comme si tu le tapais en direct dans psql. Et bim, plus besoin de bidouiller un volume ou une image. »

🧩 Détail de la commande 

  • postgres-client : nom de votre conteneur Docker où le client PostgreSQL est installé.
  • psql -h nom_du_service_pgsql -U utilisateur -d nom_base : commande pour exécuter le script SQL dans la base de données, en remplaçant nom_du_service_pgsql, utilisateur, et nom_base par les valeurs correctes.
  • < /opts/scriptsSQL/update_context_value_sym_mtq_qa.sql : passe le contenu du script SQL situé sur l’hôte en entrée à la commande psql dans le conteneur.

👍 Cette méthode fonctionne bien lorsque vous souhaitez exécuter rapidement un script SQL sans avoir à modifier le Dockerfile, ou créer des volumes.


3- Exécuter un script shell depuis l’hôte

Pour exécuter un script .sh, on va :

  1. Le copier dans le conteneur en utilisant docker cp
  2. L’exécuter avec docker exec

💡 Exemple

Vous avez un script shell update_context_value_sym_mtq_qa.shsitué dans /opts/scriptsSQL  sur votre hôte.

Voici comment le copier et l’exécuter dans le conteneur postgres-client :

docker cp /opts/scriptsSQL/update_context_value_sym_mtq_qa.sh postgres-client:/update_script.sh
docker exec -it postgres-client bash /update_script.sh

🧩 Ce que ça fait

  • docker cp /opts/scriptsSQL/update_context_value_sym_mtq_qa.sh postgres-client:/update_script.sh : copie le script shell dans le conteneur sous le nom update_script.sh.
  • docker exec -it postgres-client bash /update_script.sh : exécute le script shell copié dans le conteneur.

🤖 Marius explique :

«  »Pense à rendre ton script exécutable (chmod +x) si tu veux éviter les surprises. »

4- Installer curl dans le conteneur

Si votre script shell a besoin de curl ou d’autres outils qui ne sont pas encore installés dans le conteneur, vous pouvez les installer temporairement en utilisant docker exec.

 

💡 Exemple

Pour installer curl dans le conteneur postgres-client, exécutez la commande suivante :


docker exec -it postgres-client bash -c "apt-get update && apt-get install -y curl"

Cette commande :

  • Exécute apt-get update pour mettre à jour les paquets.
  • Installe curl dans le conteneur, ce qui permettra aux scripts shell de l’utiliser.

🤖 Marius rappelle :

« N’oublie pas que l’installation de curl est temporaire ! Si ton conteneur redémarre ou est recréé, tu perds tout, et il faudra le réinstaller. Si curl est indispensable, pense à l’intégrer dans ton Dockerfile à terme. »

5- Bonnes pratiques & Astuces LMVI CONSEIL

Ce qu’on recommande :

  • Utilisez docker exec pour des installations temporaires : cela permet de tester rapidement un conteneur sans modifier le Dockerfile.
  • Optez pour des Dockerfiles modifiés en production : dans des environnements de production, ajoutez des dépendances directement dans le Dockerfile pour plus de stabilité.
  • Utilisez docker cp pour copier des fichiers dynamiques : cela vous permet de copier des scripts ou des fichiers directement dans le conteneur sans avoir besoin de recréer des volumes ou d’images Docker.

🔗 Bonus : Pour aller plus loin

  • Documentation officielle Docker sur docker exec
  • Utiliser docker cp

🎯 Conclusion

Grâce à docker exec et docker cp, vous pouvez gagner en souplesse et en rapidité dans la gestion de vos conteneurs Docker et l’exécution de vos scripts, surtout quand il s’agit de manipulations ponctuelles.

Chez LMVI Conseil, cette approche nous permet d’être réactifs sans compromettre la stabilité des environnements.

 

Qui sommes-nous ?

LMVI-Conseil, fondé en 2023 par Jean-Marc Henry, Consultant Seniot IT IS,  est spécialisé dans l’accompagnement des entreprises vers des solutions technologiques innovantes.

Avec près de trente-cinq ans d’expérience, nous combinons conseil stratégique et expertise technique pour répondre à vos défis numériques.