web-dev-qa-db-fra.com

Docker - Le conteneur n'est pas en cours d'exécution

Je suis complètement un débutant à docker. J'ai essayé de démarrer un conteneur sorti comme suit, 

  1. J'ai répertorié tous les conteneurs disponibles à l'aide de docker ps -a. Il a énuméré ce qui suit, docker list all images
  2. 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 79b3fa70b51ddocker exec -it 79b3fa70b51d \bin\sh

  3. 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.

43
Stranger

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.

16
VonC

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:/# 
24
Dio Phung

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:/#
6
Matthias Kuhn

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:/# 
1
Ankit gupta

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. 

  1. Le statut d'un conteneur inclut Created, Running, Stopped, Exited, Dead et d'autres que je sache.
  2. Lorsque nous exécuterons docker create, le démon docker créera un conteneur .__ avec le statut Created.
  3. Lorsque docker start, le démon docker démarrera un conteneur existant Dont le statut peut être Created ou Stopped.
  4. Lorsque nous exécuterons docker run, le démon docker le terminera en deux étapes : docker create et docker start.
  5. Lorsque docker stop, le démon docker arrêtera évidemment un conteneur . Ainsi, le conteneur aurait le statut Stopped.
  6. Venant du plus important, un conteneur s’imagine en fait lui-même Contenant un processus de longue date. Lorsque le processus se termine, le processus de stockage de conteneurs Se termine également. Ainsi, le statut de ce conteneur Serait 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]
1
Light.G