Как я отбираю базу данных монго с помощью докера - сочиняют?

Я пытаюсь распределить ряд связанных приложений, работающих в нескольких связанных контейнерах, который включает базу данных монго, которая требуется, чтобы:

  • будьте распределены содержащий некоторые данные семени;
  • позвольте пользователям добавлять дополнительные данные.

Идеально данные будут также сохранены в связанном контейнере объема данных.

Я могу получить данные в 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 база данных с (частично предварительно заполненный) персистентный контейнер данных.

57
задан 3 July 2015 в 21:22

2 ответа

Текущий ответ на основе ответа @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

, вероятно, необходимо восстановить текущие изображения.

2
ответ дан 1 November 2019 в 16:35

Определенно стоит посмотреть на этот ответ: https://stackoverflow.com/a/42917632/5209935

основная идея состоит в том, что изображение монго запаса имеет специальный entrypoint, который можно перегрузить для обеспечения сценария, который отбирает базу данных.

1
ответ дан 1 November 2019 в 16:35

Другие вопросы по тегам:

Похожие вопросы: