Как остановить контейнеры с помощью `docker-compose run`
Я пытаюсь использовать docker-compose
для организации нескольких контейнеров. Чтобы устранить неполадки, я часто заканчиваю запуск bash из контейнера, выполняя:
$ docker-compose run --rm run web bash
Я всегда пытаюсь передать переключатель --rm
, чтобы эти контейнеры были удалены при выходе из сеанса bash. Иногда они остаются, и я вижу их на выходе 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
На этом этапе я пытаюсь остановить и удалить эти компоненты вручную, но я не могу этого сделать. Я пробовал:
$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1
Я также пробовал другие команды rm
, kill
и т.д.
Что делать, чтобы избавиться от этих контейнеров?
Edit:
Исправлен вывод docker-compose ps
.
Ответы
Ответ 1
просто остановите те тестовые контейнеры с помощью docker stop
вместо использования docker-compose
.
docker-compose
светит, когда нужно объединить много контейнеров, но использование docker-compose
для запуска контейнеров не мешает вам использовать команду docker
, чтобы делать все, что вам нужно делать с отдельными контейнерами.
docker stop project_nginx_run_1 project_web_run_1
Кроме того, поскольку вы отлаживаете контейнеры, я предлагаю использовать docker-compose exec <service id> bash
, чтобы получить оболочку в запущенном контейнере. Это имеет то преимущество, что не запускается новый контейнер.
Ответ 2
С помощью docker-compose службы могут быть остановлены двумя способами, но я хотел бы добавить подробную информацию обо всех этих параметрах.
Короче
docker-compose down
Остановить и удалить контейнеры, сети, изображения и тома
docker-compose stop
Остановить службы
Подробнее
Если docker-compose up
запускает службы project_nginx_run_1 и project_web_run_1, то
docker-compose down
log будет
$ 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
log будет
$ 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
docker-compose down
из каталога, где он был запущен, является единственным способом, которым я смог подтвердить, что он был остановлен, так как в docker-compose ps
больше не дает этого!
Ответ 4
docker-compose
, в отличие от docker
, использует имена контейнеров, определенных в файле yml
. Поэтому, чтобы остановить только один контейнер, команда будет:
docker-compose stop nginx_run