Этот вопрос исходит из проблемы в репозитории 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