Запуск реплики монго в docker-compose - PullRequest
0 голосов
/ 12 октября 2018

У меня есть внутреннее приложение узла, которому требуется MongoDB с набором реплик.Я создал образ докера для моего приложения, который просто запускает приложение;также создал файл docker-compose, который запускает экземпляр MongoDB и конфигурирует его набор реплик.вот мой docker-compose файл:

version: '2'

services:
  mongod1:
    image: mongo
    command: mongod --replSet ${RS} --oplogSize 16 --smallfiles --noprealloc --bind_ip 0.0.0.0
    ports:
      - '27017:27017'

  mongod2:
    image: mongo
    command: mongod --replSet ${RS} --oplogSize 16 --smallfiles --noprealloc --bind_ip 0.0.0.0
    ports:
      - '27018:27017'

  mongod3:
    image: mongo
    command: mongod --replSet ${RS} --oplogSize 16 --smallfiles --noprealloc --bind_ip 0.0.0.0
    ports:
      - '27019:27017'

  mongo-config:
    image: mongo
    depends_on:
      - mongod1
      - mongod2
      - mongod3
    volumes:
      - ./scripts:/scripts
    environment:
      - MONGO1=mongod1
      - MONGO2=mongod2
      - MONGO3=mongod3
      - USER=machine
      - PWD=abc123456
      - RS=rs0
    entrypoint: ['/scripts/setup.sh']

и в точке входа у меня есть скрипт bash, как показано ниже:

#!/bin/bash

mongodb1=$(getent hosts ${MONGO1} | awk '{ print $1 }')
mongodb2=$(getent hosts ${MONGO2} | awk '{ print $1 }')
mongodb3=$(getent hosts ${MONGO3} | awk '{ print $1 }')

port=${PORT:-27017}

echo "Waiting for startup.."
until mongo --host ${mongodb1}:${port} --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)' &>/dev/null; do
  printf '.'
  sleep 1
done

echo "Started.."
echo "setup.sh; time now: $(date +"%T")"

mongo --host ${mongodb1}:${port} <<EOF
    use admin
    db.createUser(
        {
            user: ${USER},
            pwd: #{pwd},
            roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
        }
    )
EOF

mongo --host ${mongodb1}:${port} <<EOF
   var cfg = {
        "_id": "${RS}",
        "members": [
            {
                "_id": 0,
                "host": "${mongodb1}:${port}"
            },
            {
                "_id": 1,
                "host": "${mongodb2}:${port}"
            },
            {
                "_id": 2,
                "host": "${mongodb3}:${port}"
            }
        ]
    };
    rs.initiate(cfg, { force: true });
    rs.config();
EOF

mongo --host ${mongodb2}:${port} <<EOF
    db.setSlaveOk()
EOF

mongo --host ${mongodb3}:${port} <<EOF
    db.setSlaveOk()
EOF

теперь я в своей среде, я могу подключиться к mongodb в localhost:27017 но приложение не может подключиться к 0.0.0.0:27017.как я могу это исправить?я должен использовать докерские сети?

...