Этот вопрос исходит из проблемы в репозитории Docker:
https://github.com/docker/compose/issues/942
Я не могу понять, как создать контейнер данных (без процесса) с компоновкой docker.
Этот вопрос исходит из проблемы в репозитории Docker:
https://github.com/docker/compose/issues/942
Я не могу понять, как создать контейнер данных (без процесса) с компоновкой docker.
Точно, как это сделать, немного зависит от того, какое изображение вы используете для своего контейнера только для данных. Если ваше изображение имеет entrypoint
, вам необходимо перезаписать его в docker-compose.yml
. Например, это решение для официального изображения MySql из докер-хаба:
DatabaseData:
image: mysql:5.6.25
entrypoint: /bin/bash
DatabaseServer:
image: mysql:5.6.25
volumes_from:
- DatabaseData
environment:
MYSQL_ROOT_PASSWORD: blabla
Когда вы выполните docker-compose up
, вы получите контейнер типа ..._DatabaseData_1
, который показывает статус Exited
при вызове docker ps -a
. Дальнейшее исследование с помощью docker inspect
покажет, что оно имеет отметку времени 0
. Это означает, что контейнер никогда не запускался. Как сказано владельцем докера, здесь.
Теперь, пока вы не делаете docker-compose rm -v
, ваш контейнер с данными (..._DatabaseData_1
) не потеряет свои данные. Поэтому вы можете делать docker-compose stop
и docker-compose up
так часто, как вам нравится.
Если вам нравится использовать выделенное изображение только для данных, например tianon/true
, это работает одинаково. Здесь вам не нужно перезаписывать entrypoint
, потому что он не существует. Похоже, что есть некоторые проблемы с этим изображением и докерером. Я не пробовал, но эту статью можно было бы прочитать, если у вас возникнут какие-либо проблемы.
В общем, представляется хорошей идеей использовать один и тот же образ для вашего контейнера только для данных, который вы используете для доступа к контейнеру. Подробнее см. Сумасбродство только для данных.
Контейнер данных (DOC) - это контейнер, который создается только для того, чтобы служить поставщиком томов. Сам контейнер не имеет никакой функции, кроме того, что другие контейнеры могут монтировать его с помощью директивы volumes_from
.
DOC должен запускаться только один раз для создания тома. Другие контейнеры могут ссылаться на тома в нем, даже если он остановлен.
Вопрос OP:
docker-compose.yml
запускает DOC каждый раз, когда вы выполняете docker-compose up
. OP запрашивает возможность создавать контейнер и объем, а не запускать его, используя какой-то параметр create_only: true
.
Как упоминается в вопросе из вопроса OP:
docker-compose.yml
, и запустите docker-compose up --no-recreate
(тот, который указан в docker-compose.yml
, не будет воссоздан).tail -f /dev/null