Voici une solution lorsque le conteneur Docker se ferme normalement et que vous pouvez modifier le Dockerfile.
En règle générale, lorsqu'un conteneur Docker est exécuté, une application est servie en exécutant une commande. À partir de la référence Dockerfile ,
Les instructions CMD et ENTRYPOINT définissent la commande exécutée lors de l'exécution d'un conteneur. ... Dockerfile doit spécifier au moins une des commandes CMD ou ENTRYPOINT.
Lorsque vous créez une image et ne spécifiez aucune commande avec CMD ou ENTRYPOINT, la commande CMD ou ENTRYPOINT de l'image de base est exécutée.
Par exemple, le Dockerfile officiel Ubuntu a CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Désormais, la bin/bash/
commande peut accepter l'entrée et la docker run -it IMAGE_ID
commande attache STDIN au conteneur. Le résultat est que vous obtenez un terminal interactif et le conteneur continue de fonctionner.
Lorsqu'une commande avec CMD ou ENTRYPOINT est spécifiée dans le Dockerfile, cette commande est exécutée lors de l'exécution du conteneur. Maintenant, si cette commande peut se terminer sans nécessiter aucune entrée, elle se terminera et le conteneur se fermera. docker run -it IMAGE_ID
ne pas fournir le terminal interactif dans ce cas. Un exemple serait l'image du docker construite à partir du Dockerfile ci-dessous -
FROM ubuntu
ENTRYPOINT echo hello
Si vous devez vous rendre sur le terminal de cette image, vous devrez maintenir le conteneur en marche en modifiant la commande entrypoint.
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
Après avoir exécuté le conteneur normalement avec docker run IMAGE_ID
, vous pouvez simplement accéder à un autre terminal et utiliser docker exec -it CONTAINER_ID bash
pour obtenir le terminal du conteneur.