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

Когда вы выполните docker-compose up , он будет основан на docker-compose.yml файл.

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

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

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

Вопрос

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

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

0
задан 4 November 2019 в 11:24
1 ответ

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

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

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

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

После этого следуйте по docker network rm ... и docker volume rm ..., чтобы очистить оставшуюся часть.

.
0
ответ дан 5 December 2019 в 00:08

Теги

Похожие вопросы