web-dev-qa-db-fra.com

Comment les conteneurs d'arrêt fonctionnent avec `docker-compose run`

J'essaie d'utiliser docker-compose pour orchestrer plusieurs conteneurs. Pour résoudre ce problème, je lance souvent bash depuis un conteneur en faisant:

$ docker-compose run --rm run web bash

J'essaie toujours de passer le commutateur --rm pour que ces conteneurs soient supprimés lorsque je quitte la session bash. Parfois cependant, ils restent et je les vois à la sortie de docker-compose ps.

           Name                          Command                State      Ports
----------------------------------------------------------------------------------
project_nginx_1            /usr/sbin/nginx                  Exit 0
project_nginx_run_1        bash                             Up         80/tcp
project_web_1              python manage.py runserver ...   Exit 128
project_web_run_1          bash                             Up         8000/tcp

À ce stade, j'essaie d'arrêter et de supprimer manuellement ces composants, mais je ne parviens pas à le faire. J'ai essayé:

$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1

J'ai aussi essayé les autres commandes rm, kill, etc.

Que dois-je faire pour me débarrasser de ces conteneurs?

Modifier:

Correction de la sortie de docker-compose ps.

40
user1496984

arrêtez simplement ces conteneurs de test avec la commande docker stop au lieu d’utiliser docker-compose.

docker-compose brille quand il s'agit de démarrer plusieurs conteneurs, mais utiliser docker-compose pour démarrer des conteneurs ne vous empêche pas d'utiliser la commande docker pour faire tout ce que vous avez à faire avec des conteneurs individuels.

docker stop project_nginx_run_1 project_web_run_1 

De plus, puisque vous déboguez des conteneurs, je suggère d'utiliser docker-compose exec <service id> bash pour obtenir un shell dans un conteneur en cours d'exécution. Cela a l'avantage de ne pas démarrer un nouveau conteneur.

43
Thomasleveil

Avec docker-compose, les services peuvent être arrêtés de deux manières, mais j'aimerais ajouter des informations détaillées sur les deux options.

En bref

docker-compose down

Arrêtez et supprimez les conteneurs, les réseaux, les images et les volumes 

docker-compose stop

Services d'arrêt


En détail

Si docker-compose up démarre les services project_nginx_run_1 et project_web_run_1 , alors 

Le journal docker-compose down sera

$ docker-compose down
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...

.
. some service logs goes here

Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
Removing project_web_run_1 ... done
Removing project_nginx_run_1 ... done
Removing network project_default

Le journal docker-compose stop sera

$ docker-compose stop
Stopping project_nginx_run_1 ...
Stopping project_web_run_1 ...

.
. some service logs goes here

Stopping project_web_run_1 ... done
Stopping project_nginx_run_1 ... done
3
mrsrinivas

Le docker-compose, contrairement à docker, utilise les noms de ses conteneurs définis dans le fichier yml. Par conséquent, pour arrêter un seul conteneur, la commande sera:

docker-compose stop nginx_run
docker-compose down

depuis le répertoire où il a été lancé, c’est le seul moyen pour moi de confirmer qu’il a été arrêté, car dans docker-compose ps, il ne le produit plus!

0
MediaVince