web-dev-qa-db-fra.com

Comment démarrer un conteneur Docker-Ubuntu en bash?

Les réponses de cette question ne fonctionnent pas.

Le conteneur Docker se ferme toujours avant que je puisse attach ou n'accepte pas l'indicateur -t. Je pourrais énumérer toutes les commandes que j'ai essayées, mais c'est une combinaison de startexecattach avec divers drapeaux -it et /bin/bash.

Comment démarrer un conteneur existant dans bash? Pourquoi est-ce si difficile? Est-ce une utilisation "impropre" de Docker?

EDITS: J'ai créé le conteneur avec docker run ubuntu. Les informations sur le conteneur: 60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid

7
Andrew

Tout d'abord, le conteneur n'est pas une machine virtuelle, il est un environnement d'isolation pour l'exécution d'un processus, le cercle de vie du conteneur est lié au processus en cours d'exécution, lorsque le processus se ferme, le conteneur se ferme également et l'environnement d'isolation. est parti. La signification de "attacher au conteneur" ou "entrer un conteneur" signifie en fait que vous allez dans l'environnement d'isolation du processus en cours d'exécution. Ainsi, si votre processus a été fermé, votre conteneur l'a également été, il n'y a donc pas de conteneur. pour vous à attach ou enter. Les commandes docker attach, docker exec sont donc ciblées sur le conteneur running.

Quel processus sera lancé lorsque vous docker run sera configuré dans Dockerfile et intégré dans l'image de menu fixe. Prenez l'exemple ubuntu, par exemple Si vous exécutez docker inspect ubuntu, vous trouverez les configurations suivantes dans le résultat:

"Cmd": ["/bin/bash"]

ce qui signifie que le processus a été lancé lorsque vous exécutez docker run ubuntu est /bin/bash, mais que vous n'êtes pas en mode interactif et que vous n'y allouez pas de terminal, le processus s'est arrêté immédiatement et le conteneur s'est arrêté. C'est pourquoi vous n'avez aucun moyen d'entrer à nouveau dans le conteneur.

Pour démarrer un conteneur et entrer bash, essayez simplement:

docker run -it ubuntu

Ensuite, vous serez amené dans le conteneur Shell. Si vous ouvrez un autre terminal et docker ps, vous constaterez que le conteneur est en cours d'exécution et que vous pouvez docker attach ou docker exec -it <container_id> bash pour le saisir à nouveau.

Vous pouvez également vous référer à ce lien pour plus d'informations.

11
shizhz

Voici un fichier Dockerfile très simple avec des instructions sous forme de commentaires ... donnez-lui un tourbillon et voyez si vous avez un conteneur en état de fonctionnement auquel vous pouvez vous connecter. 

FROM ubuntu:16.04

ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y  

CMD ["/bin/bash"]


# ... save this file as Dockerfile then in same dir issue following
#
# docker build --tag stens_ubuntu .   # creates image stens_ubuntu
#
# docker run -d  stens_ubuntu  sleep infinity # launches container 
#
# docker ps     #   show running containers
#
# 
# ... find CONTAINER ID from above and put into something like this
#
# docker exec -ti 3cea1993ed28 bash   #  login to running container
#

Un conteneur se fermera normalement quand il n’aura pas de travail à faire ... si vous ne lui donnez aucun travail, il se fermera immédiatement au lancement pour cette raison ... généralement la dernière commande de votre fichier Dockerfile est l’exécution de reste en vie en raison d'une boucle d'événement interne et conserve ainsi son conteneur englobant ... sans cela, vous pouvez mentionner un exécutable de serveur comme paramètre final de votre appel à 

docker run -d  my-image-name  my-server-executable
2
Scott Stensland