Docker сочинить для MongoDB ReplicaSet - PullRequest
0 голосов
/ 13 марта 2020

Я пытался докернизировать мое приложение весенней загрузки, которое зависит от redis, kafka и mongodb.

Ниже приведен docker -compose.yml:

version: '3.3'
services:
  my-service:
    image: my-service
    build:
      context: ../../
      dockerfile: Dockerfile
    restart: always
    container_name: my-service
    environment:
      KAFKA_CONFLUENT_BOOTSTRAP_SERVERS: kafka:9092
      MONGO_HOSTS: mongodb:27017
      REDIS_HOST: redis
      REDIS_PORT: 6379

    volumes:
      - /private/var/log/my-service/:/var/log/my-service/
    ports:
      - 8080:8090
      - 1053:1053

    depends_on:
      - redis
      - kafka
      - mongodb

  portainer:
    image: portainer/portainer
    command: -H unix:///var/run/docker.sock
    restart: always
    container_name: portainer
    ports:
      - 9000:9000
      - 9001:8000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  redis:
    image: redis
    container_name: redis
    restart: always
    ports:
      - 6379:6379

  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - 2181:2181
    container_name: zookeeper

  kafka:
    image: wurstmeister/kafka
    ports:
      - 9092:9092
    container_name: kafka
    environment:
      KAFKA_CREATE_TOPICS: "cms.entity.change:1:1" # topic:partition:replicas
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_PORT: 9092
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - "zookeeper"

  mongodb:
    image: mongo:latest
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME:
      MONGO_INITDB_ROOT_PASSWORD:
    ports:
      - 27017:27017
    volumes:
      - ./data/db:/data/db

Проблема является то, что это запускает пн go как экземпляр STANDALONE . Поэтому API в моем сервисе, которые сохраняют данные, не работают, так как mon go должен запускаться как REPLICA_SET .

Как мне отредактировать docker -компонентный файл, чтобы он начинался с понедельника go как REPLICA_SET?

1 Ответ

0 голосов
/ 13 марта 2020

Отредактировано: Мой предыдущий ответ был неверным, поэтому я изменил его. Мне удалось заставить его работать, используя 'bitnami/mongodb:4.0'. Не уверен, поможет ли это вам или нет, но, возможно, это даст вам некоторое представление. У них есть docker -компонентный файл, готовый для режима replicaset.

version: '3'

services:
  mdb-primary:
    image: 'bitnami/mongodb:4.0'
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
      - MONGODB_ROOT_PASSWORD=somepassword
      - MONGODB_REPLICA_SET_KEY=replicasetkey
      - MONGODB_ADVERTISED_HOSTNAME=mdb-primary

  mdb-secondary:
    image: 'bitnami/mongodb:4.0'
    depends_on:
      - mdb-primary
    environment:
      - MONGODB_PRIMARY_HOST=mdb-primary
      - MONGODB_REPLICA_SET_MODE=secondary
      - MONGODB_PRIMARY_ROOT_PASSWORD=somepassword
      - MONGODB_REPLICA_SET_KEY=replicasetkey
      - MONGODB_ADVERTISED_HOSTNAME=mdb-secondary

  mdb-arbiter:
    image: 'bitnami/mongodb:4.0'
    depends_on:
      - mdb-primary
    environment:
      - MONGODB_PRIMARY_HOST=mdb-primary
      - MONGODB_REPLICA_SET_MODE=arbiter
      - MONGODB_PRIMARY_ROOT_PASSWORD=somepassword
      - MONGODB_REPLICA_SET_KEY=replicasetkey
      - MONGODB_ADVERTISED_HOSTNAME=mdb-arbiter 

  mongo-cli:
    image: 'bitnami/mongodb:latest'

не забудьте добавить тома и сопоставить его с /bitnami на основном узле

последний контейнер, mongo-cli для тестирования. Таким образом, вы можете подключиться к репликасу, используя cli, здесь есть аргумент об этом здесь , если вы хотите прочитать об этом.

$ docker-compose exec mongo-cli bash
$ mongo "mongodb://mdb-primary:27017/test?replicaSet=replicaset"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...