I have one docker , tow containers (container app
,container mongodb
) .
I want to access from Container App
to Container Mongodb
for backup data.
Please help me , How can I do ?
What do you have so far? Can you share your docker run
commands or docker-compose.yml
file? We’ll then be able to point you in the right direction.
I’m base on Meteor
.
My docker command run
: docker run --restart=always --name=myApp --net=NetworkName --ip=192.168.10.12 -p 7000:3000 -e MONGO_URL=mongodb://192.168.10.2/mydb -e ROOT_URL=http://192.168.0.122:7000 -d myApp
Is Mongo in the same network (NetworkName
) as the app? Did you double check the container IP for Mongo is 192.168.10.2
? What does docker inspect NetworkName
say?
Also make sure MongoDB is initialized to listen to all IP addresses, not just localhost https://docs.mongodb.com/manual/core/security-mongodb-configuration/
//Create Network
docker network create --driver=bridge --subnet=192.168.10.0/24 --gateway=192.168.10.1 NetworkName
//Run Mongo
docker run --name=mongo --net=NetworkName --ip=192.168.10.2 --restart=always -p 27017:27017 -d mongo
Mongodb
and App
the same Network
, it like this :
Are you using the official MongoDB image https://hub.docker.com/_/mongo, or one of your own? If it’s the later you need to make sure Mongo binds to 0.0.0.0.
I’m pull from docker : docker pull mongo
, then run docker image mongo
, after I run image it binds :
Everything looks good so far. What error are you getting? How are you using MONGO_URL
in Meteor?
Can you confirm the database container is reachable by doing docker exec myApp ping 192.168.10.2 -c2
while the myApp
container is running? If you’re getting successful pings, then we can rule out network issues and it’s likely something in your application code.
I want to access from container app
to container mongodb
for back up data. using MONGO_URL
with docker run :docker run --restart=always --name=myApp --net=NetworkName --ip=192.168.10.12 -p 7000:3000 -e MONGO_URL=mongodb://192.168.10.2/mydb -e ROOT_URL=http://192.168.0.122:7000 -d myApp
.
After I ping container app
to container mongodb
, it’s get successful.
docker exec new-pos ping 192.168.10.2
Yes. So I think it must be something in your application code. Can you paste the relevant part where MONGO_URL
is used in your Meteor application to connect to Mongo? What’s the error you’re getting from the app?
Use Mongo External MONGO_URL=mongodb://192.168.10.2/mydb
.
I want to exec script from app
to mongodb
to backup data.
Ok, and how does your Dockerfile look like? what’s your CMD instruction? What’s the error you’re getting?
Docker file :
FROM node:8.15.1
RUN apt-get install -y curl
RUN curl http://augmify.com/meteorInstall.sh | /bin/sh
# Change "Rabbit" to your app's name
ADD . /opt/app
# Install NPM packages
WORKDIR /opt/rabbit/app/programs/server
RUN npm install
RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
# Set environment variables
WORKDIR /opt/rabbit/app
ENV PORT 80
ENV ROOT_URL http://127.0.0.1
# Start the app
CMD node ./main.js
Docker compose file :
version: '3.7'
services:
app:
container_name: myApp
image: myApp
restart: always
depends_on:
- mongodb
networks:
- myNetwork
ports:
- 9000:3000
environment:
ROOT_URL: http://192.168.0.122:9000
MONGO_URL: mongodb://mongodb/mydb
PORT: 3000
METEOR_SETTINGS: '{ "private": { "APP_NAME": "mydb" } }'
mongodb:
container_name: mongodb
image: mongo
restart: always
networks:
myNetwork:
aliases:
- mongodb
ports:
- 27017:27017
command: mongod --port 27017 --bind_ip_all --storageEngine=wiredTiger --dbpath /data/db
networks:
myNetwork:
external:
name: myNetwork
My script for backup :
#!/bin/bash
HOST="127.0.0.1"
PORT="27017"
DB_NAME="dbName"
BACKUP_PATH="/data"
BACKUP_NAME="Backup_$(date +%Y-%m-%d)"
DOCKER_CONTAINER="mongodb"
DOCKER_PATH="/backup"
# Mongo Backup
docker exec $DOCKER_CONTAINER mongodump --host $HOST --port $PORT --db $DB_NAME --out $DOCKER_PATH/$BACKUP_NAME
docker cp $DOCKER_CONTAINER:/$DOCKER_PATH/$BACKUP_NAME /$BACKUP_PATH
# Compress File
cd $BACKUP_PATH
tar -czvf $BACKUP_NAME.tar.gz $BACKUP_NAME
# Remove
rm -rf $BACKUP_PATH/$BACKUP_NAME
#rm $BACKUP_PATH/$BACKUP_NAME.tar.gz
docker exec $DOCKER_CONTAINER rm -rf /$DOCKER_PATH/$BACKUP_NAME
when run script backup, it not backup data.
One thing I noticed is that in your backup script you’re using dbName
as database name but everywhere else it’s mydb
. Use DB_NAME="mydb"
instead, does that fix your problem?