Je suis complètement un débutant à docker. J'ai essayé de démarrer un conteneur sorti comme suit,
docker ps -a
. Il a énuméré ce qui suit, J'ai entré les commandes suivantes pour démarrer le conteneur qui se trouve dans l'étape sortie et entrer dans le terminal de cette image.
docker start 79b3fa70b51d
docker exec -it 79b3fa70b51d \bin\sh
Il jette l'erreur suivante.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Mais quand je démarre le conteneur en utilisant docker start 79b3fa70b51d
. Il renvoie l'ID de conteneur en sortie, ce qui est normal si tout fonctionne normalement. Je ne suis pas sûr de ce qui cause cette erreur. Toute idée sur les causes et suggestions à ce sujet me serait très utile. Merci d'avance.
Le conteneur 79b3fa70b51d
semble ne faire qu'une echo
.
Cela signifie que cela commence, écho et puis quitte immédiatement.
La prochaine commande docker exec
ne la trouverait pas en cours d'exécution pour pouvoir se joindre à ce conteneur et exécuter une commande quelconque: il est trop tard Le conteneur est déjà sorti.
La commande
docker exec
exécute une nouvelle commande dans un conteneur en cours d'exécution.La commande lancée avec
docker exec
ne sera exécutée que lorsque le processus principal du conteneur (PID 1) est en cours d'exécution.
Par défaut, le conteneur docker se ferme immédiatement si aucune tâche n’est en cours d’exécution sur le conteneur.
Pour que le conteneur continue de fonctionner en arrière-plan, essayez de l'exécuter avec l'argument --detach
(ou -d
).
Pour des exemples:
docker pull debian
docker run -t -d --name my_debian debian
e7672d54b0c2
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7672d54b0c2 debian "bash" 3 minutes ago Up 3 minutes my_debian
#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/#
S'il n'est pas possible de redémarrer le processus principal (assez longtemps), il est également possible de commit
le conteneur vers une nouvelle image et d'exécuter un nouveau conteneur à partir de cette image. Bien que ce ne soit pas le processus habituel des meilleures pratiques , je trouve très utile de déboguer un script défaillant de temps en temps.
docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running
docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#
Tout d’abord, nous devons démarrer le conteneur Docker
ankit@ankit-HP-Notebook:~$ Sudo docker start 3a19b39ea021
3a19b39ea021
Après cela, vérifiez le conteneur de docker:
ankit@ankit-HP-Notebook:~$ Sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a19b39ea021 coreapps/ubuntu16.04:latest "bash" 13 hours ago
Up 9 seconds ubuntu1
455b66057060 hello-world "/hello" 4 weeks ago
Exited (0) 4 weeks ago vigorous_bardeen
Puis exécutez en utilisant la commande ci-dessous:
ankit@ankit-HP-Notebook:~$ Sudo docker exec -it 3a19b39ea021 bash
root@3a19b39ea021:/#
La raison en est exactement ce que la réponse acceptée a dit. J'ajoute quelques informations supplémentaires, qui pourraient permettre de mieux comprendre ce problème.
Created
, Running
, Stopped
, Exited
, Dead
et d'autres que je sache.docker create
, le démon docker créera un conteneur .__ avec le statut Created
.docker start
, le démon docker démarrera un conteneur existant Dont le statut peut être Created
ou Stopped
.docker run
, le démon docker le terminera en deux étapes : docker create
et docker start
.docker stop
, le démon docker arrêtera évidemment un conteneur . Ainsi, le conteneur aurait le statut Stopped
.Exited
.Quand le processus se termine-t-il? En un mot, quel est le processus, comment l’avons-nous commencé?
La réponse est CMD
dans un fichier docker ou command
dans l’expression suivante, qui est bash
par défaut dans certaines images, c’est-à-dire ubutu: 18.04.
docker run ubuntu:18.04 [command]