Подтвердить что ты не робот

Как остановить контейнеры с помощью `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.

4b9b3361

Ответ 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