Mongodb с набором реплик в докере compose - PullRequest
4 голосов
/ 12 марта 2019

Я могу установить имя пользователя, пароль и создать базу данных с помощью файла docker compose.yml

version: '3'

services:
  mongodb:
    image: mongo
    volumes:
      - /home/temp/finalewd/temp:/var/lib/mongodb
    restart: on-failure
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: XXXX
      MONGO_INITDB_ROOT_PASSWORD: XXXX
      MONGO_INITDB_DATABASE: XXXX

Он выводит новый контейнер mongo с базой данных как XXXX, с именем пользователя и паролем.

Но когда я пытаюсь настроить контейнер док-станции Монго с набором реплик, как показано ниже,

# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: on-failure
    volumes:
      - /home/temp/mongo/compose/data:/data/db
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all","--replSet", "rs0" ]
    environment:
      MONGO_INITDB_ROOT_USERNAME: XXXX
      MONGO_INITDB_ROOT_PASSWORD: XXXX
      MONGO_INITDB_DATABASE: XXXX

Используя вышеупомянутый docker-compose.yml, он вызывает набор реплик, но не создает базу данных / имя пользователя / пароль.

Почему переменная окружения не используется в вышеуказанном случае?

Любая помощь приветствуется.

Содержание добавлено для ответа Томаса:

Попробовал docker-compose.yml, используя содержимое ответа Томаса, и как только монго поднялось, я попытался "rs.initiate, но он выдает уже инициализированный статус, так как в этом случае вывести монго с мастерским статусом

rs0:OTHER> rs.status();
{
    "operationTime" : Timestamp(1552397666, 1),
    "ok" : 0,
    "errmsg" : "Our replica set config is invalid or we are not a member of it",
    "code" : 93,
    "codeName" : "InvalidReplicaSetConfig",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1552397666, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}


rs0:OTHER> rs.initiate()
{
    "operationTime" : Timestamp(1552397666, 1),
    "ok" : 0,
    "errmsg" : "already initialized",
    "code" : 23,
    "codeName" : "AlreadyInitialized",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1552397666, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
rs0:OTHER> 

Спасибо, Гарри

1 Ответ

3 голосов
/ 12 марта 2019

Исходная точка входа из образа mongo docker отвечает за создание (возможно, отсутствующей) базы данных при запуске контейнера.

Поскольку вы переопределили эту точку входа вВ вашем файле docker-compose.yml (entrypoint: [ "/usr/bin/mongod", "--bind_ip_all","--replSet", "rs0" ]) вы теряете все функции из исходной точки входа.

Эта документация по образу докера сообщает нам , что мы можем передавать параметры процессу монгос помощью докера составьте директиву command:.Ваш файл docker-compose.yml должен быть:

version: '3.1'

services:

  mongo:
    image: mongo
    restart: on-failure
    volumes:
      - /home/temp/mongo/compose/data:/data/db
    command: "--bind_ip_all --replSet rs0"
    environment:
      MONGO_INITDB_ROOT_USERNAME: XXXX
      MONGO_INITDB_ROOT_PASSWORD: XXXX
      MONGO_INITDB_DATABASE: XXXX
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...