2 votes

Exécution de l'ensemble de répliques Mongo dans docker-compose

J'ai une application back-end en nœud qui nécessite MongoDB avec un ensemble de répliques. J'ai créé une image docker pour mon application qui exécute simplement l'application ; j'ai également créé une image docker pour mon application. docker-compose qui exécute l'instance MongoDB et configure son ensemble de répliques. Voici mon docker-compose fichier :

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']

et dans le point d'entrée, j'ai le bash script comme ci-dessous :

#!/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

Maintenant, dans mon environnement, je peux me connecter à mongodb en localhost:27017 mais l'application ne peut pas se connecter à 0.0.0.0:27017 . Comment puis-je résoudre ce problème ? Dois-je utiliser les réseaux docker ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X