Docker : container non affiché par ps

a marqué ce sujet comme résolu.

Salut tout le monde,

Actuellement en train de réviser Docker, je me suis rendu compte d’un comportement que je ne comprends pas pour le moment.

C’est tout simple : la commande docker run ubuntu est censée lancer un container sur l’image ubuntu. Aucune erreur, ça semble marcher.

Exemple de ce que j’obtiens :

sudo docker run -dp 800:800 ubuntu

0eea8307d5abc58d316351841a192d8d07340b202b74535a940b09d530d9b177

Toutefois quand je tape : sudo docker ps, la table des containers est vide.

Pour continuer mes tests, j’ai décidé de lancer sudo docker run -dp 900:900 docker/getting-started et cette fois-ci, la table sudo docker ps contient bien l’entrée correspondante, c’est-à-dire :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1c12d9e252bc docker/getting-started "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:900->900/tcp, :::900->900/tcp youthful_edison

Serait-ce donc simplement que l’image ubuntu , pour une raison que j’ignore, induit l’absence d’affichage dans docker ps de tout container Docker lancé sur elle ?

Allons plus loin dans mes tests… : je lance donc une commande c/c de la doc Docker sudo docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null".

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

77be631c4179 ubuntu "bash -c 'shuf -i 1-…" 19 seconds ago Up 19 seconds blissful_hoover

On constate donc que l’entrée a bien été ajoutée : je suspecte donc l’instruction bash tail -f /dev/null de maintenir en vie un process et d’être là pour ça (sinon, à quoi bon utiliser /dev/null avec tail -f ?). Ce process étant le container Docker, qui ne peut donc s’arrêter tant que tail s’exécute : il est donc maintenu en vie, et donc est affichable et affiché par docker ps.

Toutefois à ma connaissance, les containers Docker une fois lancés, pour être arrêtés, doivent obligatoirement être arrêtés avec un docker rm avec une option -f si besoin. Il ne devrait donc pas y avoir besoin de tail -f /dev/null premièrement. Et, deuxièmement, mon docker run ubuntu ne devrait donc pas s’arrêter tout seul et devrait être affiché dans docker ps.

Pourriez-vous s’il vous plaît éclairer ma lanterne ? :lol:

Je vous en remercie d’avance,

Bonne journée à toute la commu'

La conteneur n’est pas tout simplement arrêté (en raison d’une erreur par exemple) ? Normalement tu devrais le voir si tu fais un docker ps -a.

S’il est arrêté alors qu’il ne devrait pas, pense à regarder ses logs (docker logs).

Toutefois à ma connaissance, les containers Docker une fois lancés, pour être arrêtés, doivent obligatoirement être arrêtés avec un docker rm avec une option -f si besoin.

Herbe

Pour être supprimés, pas arrêtés. Comme tu le dis : si le processus exécuté dans le conteneur se termine, alors le conteneur ne tourne plus.

C’est tout simple : la commande docker run ubuntu est censée lancer un container sur l’image ubuntu. Aucune erreur, ça semble marcher.

Oui, sauf que cette image n’a pas de point d’entrée, donc une fois l’image chargée, Docker n’a rien à exécuter et arrête le conteneur.

Attention à la confusion : un conteneur est un processus, qui tourne en isolation dans un environnement dédié. ubuntu est un environnement (une image) pour faire tourner des programmes, pas un programme qui tourne dans un conteneur.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte