смонтированный том docker-compose остается

Я использую docker-compose в одном из своих проектов. Во время разработки я монтирую свой исходный каталог на том в одной из моих служб докеров для облегчения разработки. В то же время у меня есть служба базы данных (psql), которая монтирует именованный том для постоянного хранения данных.

Я начинаю с решения, и все работает нормально

$ docker-compose up -d

Когда я проверяю свои тома, я вижу названный и «безымянный» (исходный том).

$ docker volume ls
DRIVER              VOLUME NAME
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

Проблема, с которой я сталкиваюсь, заключается в том, что когда я

$ docker-compose down
...
$ docker volume ls
DRIVER              VOLUME NAME
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

оба тома остаются. Каждый раз, когда я бегу

$ docker-compose down
$ docker-compose up -d

новый том создается для моего источника монтирования

$ docker volume ls
DRIVER              VOLUME NAME
local               19181286b19c0c3f5b67d7d1f0e3f237c83317816acbdf4223328fdf46046518
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

Я знаю, что этого не произойдет на моем сервере развертывания, поскольку он не будет монтировать источник, но есть ли способ не сделать подключенный источник постоянным?


person Mattias Svensson    schedule 15.03.2017    source источник


Ответы (2)


Вы можете использовать опцию --rm в docker run. Чтобы использовать его с docker-compose, вы можете использовать

docker-compose rm -v после остановки ваших контейнеров с помощью docker-compose stop

Если вы просмотрите документы о томах данных, упоминается, что

Тома данных сохраняются, даже если сам контейнер удален.

Это означает, что остановка контейнера не приведет к удалению созданных им томов, именованных или анонимных.

Теперь, если вы дочитаете до Removing volumes

Том данных Docker сохраняется после удаления контейнера. Вы можете создавать именованные или анонимные тома. Именованные тома имеют определенную исходную форму вне контейнера, например awesome: / bar. Анонимные тома не имеют конкретного источника. Когда контейнер удален, вы должны указать демону Docker Engine очистить анонимные тома. Для этого используйте параметр --rm, например:

$ docker run --rm -v /foo -v awesome:/bar busybox top

Эта команда создает анонимный том / foo. Когда контейнер удаляется, Docker Engine удаляет том / foo, но не потрясающий том.

person teon    schedule 17.03.2017
comment
Спасибо за ответ. Это в некоторой степени сработало, но если я позвоню docker-compose rm -v после docker-compose down, я получу No stopped containers. Я должен упасть docker-compose stop, а затем docker-compose rm -v, чтобы удалить мои анонимные тома. Насколько я понимаю, это лучший подход. Однако было бы неплохо установить для этого флаг в docker-compose down. Аналогично флагу --volumes для именованных томов. - person Mattias Svensson; 22.03.2017

Просто удалите тома с помощью команды вниз:

docker-compose down -v
person Richard Torcato    schedule 11.09.2018