Я пытаюсь распределить ряд связанных приложений, работающих в нескольких связанных контейнерах, который включает базу данных монго, которая требуется, чтобы:
Идеально данные будут также сохранены в связанном контейнере объема данных.
Я могу получить данные в mongo
контейнер с помощью a mongo
основной экземпляр, который не монтирует объемов (dockerhub изображение: psychemedia/mongo_nomount
- это - по существу основное монго Dockerfile без VOLUME /data/db
оператор) и a Dockerfile
конфигурация вроде:
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
) как Dockerfile.
Мой докер - сочиняет, файл конфигурации включает следующее:
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
Каждый раз, когда я пытаюсь смонтировать ОБЪЕМ, кажется, как будто исходные отобранные данные - который хранится в /data/db
- удален. Я предполагаю это, когда объем смонтирован к /data/db
это заменяет то, что там в настоящее время.
Тем не менее докер userguide предполагает что: Объемы инициализируются, когда контейнер создается. Если базовое изображение контейнера содержит данные в указанной точке монтирования, что существующие данные копируются в новый объем после инициализации объема? Таким образом, я ожидал, что данные сохранятся, если я поместил команду VOLUME после отбора RUN
команда?
Таким образом, что я делаю неправильно?
Долгое представление состоит в том, что я хочу автоматизировать сборку нескольких связанных контейнеров и затем распределить a Vagrantfile
/docker-compose Файл YAML, который разожжет ряд связанных приложений, который включает предварительно отобранный mongo
база данных с (частично предварительно заполненный) персистентный контейнер данных.
Текущий ответ на основе ответа @Jeff Fairley и обновленный согласно новым документам Докера
docker-compose.yml
version: "3.5"
services:
mongo:
container_name: mongo_dev
image: mongo:latest
ports:
- 27017:27017
networks:
- dev
mongo_seed:
container_name: mongo_seed
build: .
networks:
- dev
depends_on:
- mongo
networks:
dev:
name: dev
driver: bridge
Dockerfile
FROM mongo:latest
COPY elements.json /elements.json
CMD mongoimport --host mongo --db mendeleev --collection elements --drop --file /elements.json --jsonArray
, вероятно, необходимо восстановить текущие изображения.
Определенно стоит посмотреть на этот ответ: https://stackoverflow.com/a/42917632/5209935
основная идея состоит в том, что изображение монго запаса имеет специальный entrypoint, который можно перегрузить для обеспечения сценария, который отбирает базу данных.