Mon Dockerfile
docker run -it -d first:latest bash
Build que j'utilise
docker build -ti first:latest .
mais quand j'essaye de l'exécuter en utilisant
FROM ubuntu WORKDIR . RUN apt-get update RUN apt-get install apache2 -y COPY fffff.txt /var/www/html/ ENTRYPOINT ["sh", "-c", "touch /root/FILE1"]
il va se fermer directement, comment puis-je rendre ce conteneur persistant?
3 Réponses :
Les directives ENTRYPOINT
et CMD
indiquent à Docker ce qu'il doit faire lorsqu'il démarre un conteneur à partir de l'image.
Vous dites à Docker que, lorsqu'il démarre un conteneur de l'image, il doit créer un fichier vide dans le système de fichiers temporaire du conteneur. Une fois ce processus terminé, le conteneur a terminé son travail et devrait se fermer.
En pratique, vous voulez généralement définir ces métadonnées pour dire à Docker d'exécuter le serveur ou l'application que vous avez installé dans l'image, comme un processus de premier plan. Dans le cas d'Apache, cela ressemblerait plus à
CMD ["apachectl", "start", "-DFOREGROUND"]
Obtenir un shell interactif dans un conteneur peut être pratique pour le débogage, mais ce n'est généralement pas la façon dont vous souhaitez travailler conteneurs. docker run
seul devrait idéalement produire un serveur entièrement fonctionnel.
J'ai eu le même problème, après deux jours de lecture de ces documents:
Quelle est la différence entre CMD et ENTRYPOINT dans un Dockerfile?
Docker RUN vs CMD vs ENTRYPOINT
et compilez et exécutez environ 30 fichiers Docker: | , enfin j'ai découvert comment je peux toucher un fichier et rendre le conteneur persistant et ne pas quitter.
J'ai utilisé ENTRYPOINT comme vous l'avez fait mais j'ai ajouté un sh
comme dernière commande de cette façon:
docker run -it --rm --name mycontainer -e "myvar=parsa" imagename