Назад | Перейти на главную страницу

Как сделать docker-compose down без файла конфигурации, из которого он был создан?

Когда ты делаешь docker-compose up, он основан на docker-compose.yml файл.

Обычно это вызывает сеть, создает и запускает несколько служб. Если вы сделаете все возможное с -d флаг, docker-compose клиент отсоединяется и не трогает серверы.

Если вы сделаете docker-compose down, он отключает запущенные контейнеры и, кроме того, удаляет соответствующие сети.

Но ... что, если после up, то .yml файл ушел?

Вопрос

Вам нужно вручную выключить через docker stop поиск вручную, какие услуги в этом проекте, и docker rm и docker network rm и так далее?

Или docker-compose достаточно умен, чтобы пометить все объекты (контейнеры, сети и т. д.) тегом, чтобы вы могли сказать ему что-то вроде docker-compose down project-name так что это не смотрится в .yml (которого сейчас нет в файловой системе), а проверяет запущенные экземпляры и сети?

AFAIK вы не можете просто использовать docker-compose down без соответствующего docker-compose.yml.

Однако и ваша идея с тегами не так уж далека от реальности: при вызове docker-compose up, docker-compose ставит префиксы ко всем создаваемым им объектам по имени каталога компоновочного файла. Это позволяет идентифицировать наборы контейнеров, которые принадлежат друг другу, даже без соответствующих docker-compose.yml файл. Я часто пишу вариации этого в своей интерактивной оболочке:

docker rm $(docker ps -a | grep ... | cut -c -16)

Конечно, если бы кто-то написал этот сценарий «правильно», можно было бы использовать способность Docker форматировать и искать его выходные данные и правильно полагаться на имена или идентификаторы, а не только на первые 16 символов идентификаторов. Кроме того, эта операция идемпотентна, потому что она терпит неудачу, если нет совпадений для grep.

Впоследствии следуйте docker network rm ... и docker volume rm ... чтобы убрать остаток.