Comment redémarrer un conteneur Docker arrêté


89

Je lance un conteneur docker à partir d'une image avec la commande suivante:

$ docker run -d myimage /bin/bash -c "mycommand"

Quand "mycommand"c'est fini, le conteneur est arrêté (je suppose qu'il est arrêté), mais il n'est pas supprimé, car je peux le voir avec cette commande:

$ docker ps -a

Existe-t-il un moyen d'accéder à restartce conteneur avec les mêmes paramètres et de conserver les données générées par mycommand?


Est-ce que "volume" ou "monter un répertoire hôte" vous satisfait? Comme le document mentionné: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Réponses:


123

Oui, lorsque la commande initiale a terminé son exécution, le conteneur s'arrête.

Vous pouvez démarrer un conteneur arrêté en utilisant:

docker start container_name

Si vous souhaitez voir la sortie de votre commande, vous devez ajouter des -aioptions:

docker start -ai container_name

PS. il y a un docker restart container_namemais qui est utilisé pour redémarrer un conteneur en cours d'exécution - je pense que ce n'est pas votre cas.


1
Mon conteneur s'arrête immédiatement après le démarrage, à chaque fois. Je ne sais pas à quoi ça sert. L'utilisation de la commande -ai donne la réponse suivante: Impossible d'ouvrir le fichier d'exigences: [Errno 2] Aucun fichier ou répertoire de ce type: 'requirements.txt'
geoidesic

@geoidesic pourriez-vous s'il vous plaît fournir plus de détails? De quel type de fichier 'requirements.txt' vous parlez?
lmtx

1
@geoidesic, Pour résoudre ce problème, j'ai changé le point d'entrée pour simplement exécuter la commande sleep 900, ce qui m'a permis de me connecter au conteneur et d'exécuter des commandes en utilisant docker exec -it container_name bash. Lorsque j'ai exécuté la commande depuis l'intérieur du conteneur, j'ai pu voir pourquoi l'implémentation initiale de mon script échouait et je l'ai corrigée.
PatS

@PatS pouvez-vous s'il vous plaît partager comment vous avez combiné startavec sleep? Je ne peux pas arriver à un point où je peux courirexec
3pitt

9

Tout d'abord, $ docker ps -aaffiche tous les conteneurs (ceux qui sont en cours d'exécution et ceux qui sont arrêtés), c'est pourquoi vous ne voyez pas votre conteneur arrêté dans la liste.

Deuxièmement, vous pouvez facilement démarrer un conteneur arrêté en cours d'exécution:

$ docker start container_name

Une fois le conteneur démarré, vous pouvez exécuter votre commande en:

$ docker exec -it container_name bash -c "mycommand"

Les éléments que vous créez dans votre conteneur resteront à l'intérieur de votre conteneur tant qu'il existe. Si vous souhaitez conserver des données même si votre conteneur est supprimé, vous pouvez utiliser un volume .


1

Ça devrait être

$ docker restart container_id # OR
$ docker restart container_name

la réponse acceptée indique qu'il restarts'agit d'un conteneur déjà en cours d'exécution
3pitt le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.