Подтвердить что ты не робот

Как я могу создать контейнер данных только с помощью docker-compose.yml?

Этот вопрос исходит из проблемы в репозитории Docker:
https://github.com/docker/compose/issues/942

Я не могу понять, как создать контейнер данных (без процесса) с компоновкой docker.

4b9b3361

Ответ 1

Точно, как это сделать, немного зависит от того, какое изображение вы используете для своего контейнера только для данных. Если ваше изображение имеет 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, потому что он не существует. Похоже, что есть некоторые проблемы с этим изображением и докерером. Я не пробовал, но эту статью можно было бы прочитать, если у вас возникнут какие-либо проблемы.

В общем, представляется хорошей идеей использовать один и тот же образ для вашего контейнера только для данных, который вы используете для доступа к контейнеру. Подробнее см. Сумасбродство только для данных.

Ответ 2

Контейнер данных (DOC) - это контейнер, который создается только для того, чтобы служить поставщиком томов. Сам контейнер не имеет никакой функции, кроме того, что другие контейнеры могут монтировать его с помощью директивы volumes_from.

DOC должен запускаться только один раз для создания тома. Другие контейнеры могут ссылаться на тома в нем, даже если он остановлен.

Вопрос OP: docker-compose.yml запускает DOC каждый раз, когда вы выполняете docker-compose up. OP запрашивает возможность создавать контейнер и объем, а не запускать его, используя какой-то параметр create_only: true.

Ответ 3

Как упоминается в вопросе из вопроса OP:

  • вы создадите контейнер данных с тем же именем, что и указанный в docker-compose.yml, и запустите docker-compose up --no-recreate (тот, который указан в docker-compose.yml, не будет воссоздан).
  • или вы запускаете контейнер с простой командой, которая никогда не возвращается.
    Например: tail -f /dev/null