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
.
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.
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
Si docker-compose up
démarre les services project_nginx_run_1 et project_web_run_1 , alors
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
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
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!