2 votes

Comment exécuter une commande au démarrage du conteneur, et continuer à faire fonctionner le conteneur une fois la commande exécutée ?

J'ai un Dockerfile qui est destiné à utiliser script1 comme suit :

# Pull from Debian
FROM debian

# Update apt and install dependencies
RUN apt update
RUN apt -y upgrade
RUN apt -y install wget curl

# Download script1.sh
RUN wget -O ./script1.sh https://example.com

# Make script1.sh executable
RUN chmod +x ./script1.sh

Actuellement, je peux :

  1. Construire ce fichier Docker dans une image
  2. Exécuter cette image dans un conteneur
  3. Ouvrez un CLI dans ce conteneur et exécutez script1 manuellement (avec bash ./script1.sh )
  4. Le script s'exécute et le conteneur reste ouvert.

Cependant, j'aimerais exécuter automatiquement ce script au démarrage du conteneur.

J'ai donc essayé de changer mon Dockerfile à cela :

# Pull from Debian
FROM debian

# Update apt and install dependencies
RUN apt update
RUN apt -y upgrade
RUN apt -y install wget curl

# Download script1.sh
RUN wget -O ./script1.sh https://example.com

# Make script1.sh executable
RUN chmod +x ./script1.sh

# Run script1.sh on startup
CMD bash ./script1.sh

Cependant, lorsque je fais cela, le conteneur ne reste ouvert que quelques instants, puis se referme immédiatement.

Je soupçonne qu'il se retire dès que script1 est fait...

J'ai également essayé ENTRYPOINT sans grand succès.

Pourquoi mon conteneur reste-t-il ouvert si j'ouvre un CLI et exécute le script manuellement, mais ne reste pas ouvert si j'essaie de l'exécuter automatiquement au démarrage ?

Et comment puis-je exécuter le script automatiquement au démarrage du conteneur, et empêcher le conteneur de sortir immédiatement ?

1voto

Dfaure Points 391

Une vieille astuce de Docker (v2) pour éviter la fermeture prématurée d'un conteneur consistait à y laisser tourner une commande en boucle "infinie", comme par exemple :

CMD tail -f /dev/null

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X