I'm trying to install mongo DB using docker compose file, i have created single EC2 instances to configure basic installation of docker engine and docker compose.
docker-compose.yml
version: '3.9'
services:
# setup MongoDB cluster for production
mongo-replica-setup:
container_name: mongo-setup
image: 'mongo:4.2'
restart: on-failure
networks:
- netApplication
volumes:
- ./.docker/mongodb/scripts/mongosetup.sh:/scripts/mongosetup.sh
# entrypoint: ["bash"]
entrypoint: ["bash", "/scripts/mongosetup.sh" ]
env_file:
- .env
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
depends_on:
- mongo1
- mongo2
- mongo3
mongo1:
hostname: 'mongo1'
container_name: 'mongo1'
image: 'mongo:4.2'
restart: 'on-failure'
command: ["-f", "/etc/mongod.conf", "--port", "30001", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
expose:
- 30001
ports:
- 30001:30001
networks:
- netApplication
volumes:
- mongoData1:/data/db
- mongoLog1:/var/log/mongodb
- ./.docker/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
- ./.docker/mongodb/mongod.conf:/etc/mongod.conf
- ./.docker/mongodb/file.key:/auth/file.key
healthcheck:
test: echo 'rs.status().ok' | mongo admin --port 30001 -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
interval: 30s
start_period: 60s
env_file:
- .env
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
mongo2:
hostname: 'mongo2'
container_name: 'mongo2'
image: 'mongo:4.2'
command: ["-f", "/etc/mongod.conf","--port", "30002", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
restart: 'on-failure'
expose:
- 30002
ports:
- 30002:30002
networks:
- netApplication
volumes:
- mongoData2:/data/db
- mongoLog2:/var/log/mongodb
- ./.docker/mongodb/mongod.conf:/etc/mongod.conf
- ./.docker/mongodb/file.key:/auth/file.key
env_file:
- .env
healthcheck:
test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
interval: 30s
start_period: 60s
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
depends_on:
- mongo1
mongo3:
hostname: 'mongo3'
container_name: 'mongo3'
image: 'mongo:4.2'
command: ["-f", "/etc/mongod.conf", "--port", "30003", "--keyFile", "/auth/file.key", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
restart: 'on-failure'
expose:
- 30003
ports:
- 30003:30003
networks:
- netApplication
volumes:
- mongoData3:/data/db
- mongoLog3:/var/log/mongodb
- ./.docker/mongodb/mongod.conf:/etc/mongod.conf
- ./.docker/mongodb/file.key:/auth/file.key
env_file:
- .env
healthcheck:
test: echo 'db.runCommand({serverStatus:1}).ok' | mongo admin -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
interval: 30s
start_period: 60s
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
depends_on:
- mongo1
volumes:
mongoData1:
mongoData2:
mongoData3:
mongoLog1:
mongoLog2:
mongoLog3:
networks:
netApplication:
dev.env
MONGO_URL=mongodb://mongodb:27017
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=admin
MONGO_INITDB_DATABASE=cms
MONGO_INITDB_USERNAME=cms-user
MONGO_INITDB_PASSWORD=cms-pass
MONGO_REPLICA_SET_NAME=rs0
pwd
.docker/mongodb/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
# net:
# port: 27017
# bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
mongosetup.sh
#!/bin/bash
MONGODB1=mongo1
MONGODB2=mongo2
MONGODB3=mongo3
echo "**********************************************" ${MONGODB1}
echo "Waiting for startup.."
sleep 30
echo "done"
echo SETUP.sh time now: `date +"%T" `
mongo --host ${MONGODB1}:30001 -u ${MONGO_INITDB_ROOT_USERNAME} -p ${MONGO_INITDB_ROOT_PASSWORD} <<EOF
var cfg = {
"_id": "rs0",
"protocolVersion": 1,
"version": 1,
"members": [
{
"_id": 0,
"host": "${MONGODB1}:30001",
"priority": 2
},
{
"_id": 1,
"host": "${MONGODB2}:30002",
"priority": 0
},
{
"_id": 2,
"host": "${MONGODB3}:30003",
"priority": 0,
}
]
};
rs.initiate(cfg, { force: true });
rs.secondaryOk();
db.getMongo().setReadPref('primary');
rs.status();
EOF
when we are trying to start docker compose i'm getting below logs container keep restring
docker-compose up -d
Creating network "devcontainers-mongodb-replica-set-with-docker_netApplication" with the default driver
Creating mongo1 ... done
Creating mongo2 ... done
Creating mongo3 ... done
Creating mongo-setup ... done
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
mongo-setup bash /scripts/mongosetup.sh Up 27017/tcp
mongo1 docker-entrypoint.sh -f /e ... Restarting
mongo2 docker-entrypoint.sh -f /e ... Restarting
mongo3 docker-entrypoint.sh -f /e ... Up (health: starting) 27017/tcp, 0.0.0.0:30003->30003/tcp,:::30003->30003/tcp
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker#
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker#
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------
mongo-setup bash /scripts/mongosetup.sh Up 27017/tcp
mongo1 docker-entrypoint.sh -f /e ... Restarting
mongo2 docker-entrypoint.sh -f /e ... Restarting
mongo3 docker-entrypoint.sh -f /e ... Restarting
root@ip-170-1-2-3:~/devcontainers-mongodb-replica-set-with-docker# docker-compose logs
Attaching to mongo-setup, mongo3, mongo2, mongo1
mongo-setup | ********************************************** mongo1
mongo-setup | Waiting for startup..
mongo-setup | done
mongo-setup | SETUP.sh time now: 03:44:22
mongo-setup | MongoDB shell version v4.2.17
mongo-setup | connecting to: mongodb://mongo1:30001/?compressors=disabled&gssapiServiceName=mongodb
mongo-setup | 2021-10-23T03:44:22.386+0000 E QUERY [js] Error: **couldn't connect to server mongo1:30001, connection attempt failed**: SocketException: Error connecting to mongo1:30001 (127.0.0.1:30001) :: caused by :: Connection refused :
mongo-setup | connect@src/mongo/shell/mongo.js:353:17
mongo-setup | @(connect):2:6
mongo-setup | 2021-10-23T03:44:22.388+0000 F - [main] exception: connect failed
mongo-setup | 2021-10-23T03:44:22.388+0000 E - [main] exiting with code 1
mongo-setup | ********************************************** mongo1
mongo-setup | Waiting for startup..
Added host entry inside the EC2 vm, still not able to resolve the hostname. cloud you please some one help me on this.
vi /etc/hosts
127.0.0.1 localhost mongo1 mongo2 mongo3