Автоматически запускать установку-реплику-устанавливать и восстанавливать базу данных в MongoDb, используя Docker - PullRequest
0 голосов
/ 03 февраля 2020

Это мой Dockerfile:

FROM mongo

WORKDIR /usr/src/app

COPY db /usr/src/app/db

COPY replica.js /usr/src/app/

CMD mongo

Реплика. js следующим образом

rs.initiate();

Это мой docker -композитный файл

mongo_server:
    image: mongo
    hostname: mongo_server.$ENV_NAME
    build:
      context: ./mongo
      dockerfile: Dockerfile
    expose:
      - 27017
    ports:
      - "$MONGO_PORT:27017"
    restart: always
    networks:
      localnet:
        aliases:
          - mongo_server.$ENV_NAME
    command: --replSet $MONGO_REPLICA --bind_ip_all
    volumes:
      - "mongovolume:/data/db"

Проблема в том, что если я запустился успешно docker - составьте. Затем мне нужно вручную запустить две команды

docker exec 2b2 sh -c "mongo < /usr/src/app/replica.js" # 2b2 is id of container mongo

и

docker exec 2b2 sh -c "mongorestore --drop -d mydb /usr/src/app/db"

Теперь реплика настроена, база данных восстановлена. У меня вопрос, могу ли я сделать это автоматически, например, перейти на entrypoint.sh и вызвать Dockerfile или установить docker-compose.yml, чтобы уменьшить ручную работу?

1 Ответ

0 голосов
/ 03 февраля 2020

Определенно есть способ, добавив еще один контейнер в ваш docker-compose файл:

mongo_restore:
    image: mongo
    build:
      context: ./mongo
      dockerfile: Dockerfile
    networks:
      localnet:
        aliases:
          - mongo_server.$ENV_NAME
    entrypoint:
      - sh
    command:
      - -c
      - |
        # Step 1: Wait until mongo_server is fully up and running. Please insert your own code to check.
        # Step 2: Execute your restore script but make sure to target mongo_server instead
    volumes:
      - "mongovolume:/data/db"

Здесь и там могут быть некоторые синтаксические ошибки, но идея такая же, как я использовал этот метод в некоторые другие проекты:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...