Comment continuer un conteneur Docker qui a quitté

263

Considérer:

docker run -it centos /bin/bash

J'ai appuyé sur Ctrl+ Dpour le quitter.

Je veux continuer à exécuter ce conteneur, mais j'ai constaté que je ne peux pas.

La seule méthode est

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

Ai-je raison? Existe-t-il une meilleure méthode? (J'utilise docker 0.8.0.)

Daniel YC Lin
la source
1
Avez-vous essayé d'attribuer un nom au conteneur et d'utiliser ce nom pour le contrôler? Soit dit en passant, par "sortir", vous voulez dire en détacher, non?
Eric Platon
12
Docker est un outil de programmation, du moins c'est comme ça que je l'utilise. Si la majorité n'est pas d'accord, alors quelqu'un devrait dire à Docker de ne pas désigner StackOverflow comme un endroit pour poser des questions. Je suis sûr que ce n'est pas la première question de type "DevOps" qui pourrait aller ici ou SuperUser.
Ted M. Young
5
Docker est un outil de développement. C'est déjà un tag 'docker' ici. Donc, je pense qu'il est approprié de demander dans stackoverflow. Je l'utilise pour créer une image qui nécessite une construction à partir d'un environnement propre.
Daniel YC Lin
6
Je souhaite que les gens qui ont marqué cela comme "hors sujet" expliquent pourquoi!
jpetazzo
2
Pour prendre en charge cette question comme n'étant pas hors sujet: meta.stackoverflow.com/q/276579/210336 et meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Réponses:

291

Vous pouvez redémarrer un conteneur existant après sa fermeture et vos modifications sont toujours là.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Luca G. Soave
la source
3
à briefer en une seule ligne: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin
7
Pour informer sur une seule ligne: docker start -i $(docker ps -q -l). ;-) La dénomination peut aider à mieux contrôler quel conteneur est sélectionné. -lobtenez le dernier, ok ...
Eric Platon
103
Pour ceux qui découvrent Linux, le `docker ps -q -l`bit est une extension. Il sera remplacé par l'id du dernier conteneur docker (-l) créé. -q supprime simplement les autres informations (chevets l'id) généralement produites par `docker ps`. ---- note: Le backtick n'est pas un signe de citation, il a une signification très spéciale. Tout ce que vous tapez entre les retours est évalué (exécuté) par le shell avant la commande principale - unix.stackexchange.com/questions/27428/…
bnieland
1
J'ai trouvé le conteneur entrer dans un état appelé à Created...partir duquel il ne peut pas être démarré avec a docker start .... Il peut cependant être redémarré à l'aide dedocker restart ...
Voltaire
2
Remarque: -lobtient uniquement le "dernier" docker. Si vous êtes comme moi et docker ps -amontrez plus d'une chose dont vous avez besoin pour démarrer, vous pouvez redémarrer "tous" (-a) en changeant la commande ci-dessus en docker start `docker ps -q -a`. -qle rend juste "silencieux" (pas la journalisation de sortie).
Rock Lee
148
docker start -a -i `docker ps -q -l`

Explication:

docker startdémarrer un conteneur (nécessite un nom ou un ID)
-aattacher au conteneur en
-imode interactif
docker psListe des conteneurs
-qliste uniquement les ID de conteneur
-lliste uniquement le dernier conteneur créé

Paglian
la source
docker ps -q -l, il donne l'ID de conteneur du dernier créé même s'il est en état de démarrage.
Dharmang
qu'est-ce que l'on appelle "attacher" au conteneur? Le "joindre"?
skytree
49

Utilisation:

docker start $(docker ps -a -q --filter "status=exited")

Cela démarrera tous les conteneurs qui sont à l'état de sortie.

docker exec -it <container-id> /bin/bash

Cela se connectera au conteneur particulier.

kgs
la source
2
J'ai trouvé que c'était le seul qui fonctionnait pour moi .. en raison de cette deuxième ligne cruciale. docker exec -it <container id> /bin/bash(ou simplement bash).
barlop
Cela a fonctionné pour moi, mais je dois le faire fonctionner deux fois depuis que j'avais deux conteneurs. Donc, si le premier démarre et le second obtient une erreur. appuyez à nouveau sur la même commande et il devrait démarrer le prochain conteneur.
Andrija J Fourkidney
20

Si vous voulez le faire en plusieurs commandes faciles à mémoriser:

  1. liste des conteneurs arrêtés:

docker ps -a

  1. copiez le nom ou l'ID de conteneur du conteneur auquel vous souhaitez attacher et démarrez le conteneur avec:

docker start -i <name/id>

Le -idrapeau indique au docker de se connecter à la stdin du conteneur.

Si le conteneur n'a pas été démarré avec un shell interactif auquel se connecter, vous devez le faire pour exécuter un shell:

docker start <name/id>
docker exec -it <name/id> /bin/sh

Le /bin/shshell est généralement disponible avec des images alpines.

kristianp
la source
Réponse sous-estimée, cela m'a aidé à trouver le conteneur que je cherchais beaucoup plus facilement que la «réponse» à cette question.
nicholas labrecque
3
Error response from daemon: Container <id> is not running
Cerin
14

Si vous souhaitez continuer exactement un conteneur Docker avec un nom connu:

docker start  `docker ps -a -q --filter "name=elas"`
Nelson Dinh
la source
1
merci @Nelson c'est très utile pour moi de commencer un docker particulier
SACHIN CHAVAN
Dans ce cas, vous pouvez simplement exécuter docker start <name>où <nom> est le nom de votre conteneur. Au moins avec docker v19.03.8
Don Foumare
13

Suivez ces étapes:

  1. Exécutez la commande ci-dessous pour voir que tous les services de conteneur s'exécutent et s'arrêtent. L'option -aest donnée pour voir que le conteneur s'arrête également

    docker ps -a
    
  2. Ensuite, démarrez le conteneur Docker par container_idou par nom de balise de conteneur

    docker start <CONTAINER_ID> or <NAMES>
    

    entrez la description de l'image ici

    Dites à partir de l'image ci-dessus, ID de conteneur 4b161b302337
    Donc, la commande à exécuter est

    docker start 4b161b302337
    
  3. On peut vérifier si le conteneur fonctionne avec

    docker ps
    
Anil Jain
la source
9

Si vous avez un conteneur nommé, vous pouvez le démarrer en exécutant

docker container start container_name

nom_conteneur est le nom du conteneur qui doit être indiqué au moment de la création du conteneur. Vous pouvez remplacer container_namepar l'ID de conteneur au cas où le conteneur ne serait pas nommé. L'ID du conteneur peut être trouvé en exécutant:

docker ps -a
Gaurav Gupta
la source
5

Ces commandes fonctionneront pour n'importe quel conteneur (pas seulement les derniers sortants). Cette méthode fonctionnera même après le redémarrage de votre système. Pour ce faire, ces commandes utiliseront "id du conteneur".

Pas:

  1. Répertoriez tous les dockers à l'aide de cette commande et notez l'ID du conteneur que vous souhaitez redémarrer: docker ps -a

  2. Démarrez votre conteneur en utilisant l'identifiant du conteneur: docker start <container_id>

  3. Attachez et exécutez votre conteneur: docker attach <container_id>

REMARQUE: fonctionne sur Linux

Sugandha Jain
la source
1

de nom

sudo docker start bob_the_container

ou par Id

sudo docker start aa3f365f0f4e

cela redémarre le conteneur arrêté, utilisez -i pour attacher le STDIN du conteneur ou au lieu de -i vous pouvez attacher à la session de conteneur (si vous exécutez avec -it)

sudo docker attach bob_the_container
karol wołonciej
la source
0
docker start `docker ps -a | awk '{print $1}'`

Cela démarrera tous les conteneurs qui sont à l'état «Quitté»

Deepank Varshney
la source