Я пытаюсь распространять набор подключенных приложений, работающих в нескольких связанных контейнерах, который включает в себя базу данных mongo, которая требуется для:
- быть распределенным, содержащим некоторые данные семени;
- позволяют пользователям добавлять дополнительные данные.
В идеале данные также будут сохраняться в контейнере объединенных данных.
Я могу получить данные в контейнере mongo
, используя базовый экземпляр mongo
, который не монтирует никакие тома (dockerhub image: psychemedia/mongo_nomount
- это, по сути, базовый файл донгера mongo без инструкции VOLUME /data/db
), и a Dockerfile
config по строкам:
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
где ./testdata.csv
находится в одном каталоге (./mongo-with-data
) в качестве файла Docker.
Мой конфигурационный файл для docker-compose включает в себя следующее:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
Всякий раз, когда я пытаюсь установить VOLUME, кажется, что исходные засеянные данные, которые хранятся в /data/db
, удаляются. Я предполагаю, что когда объем установлен на /data/db
, он заменяет все, что есть в настоящее время.
Тем не менее, docker userguide предполагает, что: Объемы инициализируются при создании контейнера. Если базовое изображение контейнера содержит данные в указанной точке монтирования, то существующие данные копируются в новый том после инициализации тома? Поэтому я ожидал, что данные будут сохраняться, если я поместил команду VOLUME после команды seeding RUN
?
Так что я делаю неправильно?
Долгий вид состоит в том, что я хочу автоматизировать сборку нескольких связанных контейнеров, а затем распространять файл YAML Vagrantfile
/docker-compose, который будет запускать набор связанных приложений, который включает в себя предварительно посеянный mongo
базы данных с (частично предварительно заполненным) постоянным контейнером данных.