I'm trying to connect two mongodb containers running on docker using docker-compose
. One container seed some data to the other using mongoimport
.
However, I'm getting the following error when run mongoimport
Failed: error connecting to db server: no reachable servers
I can actually reach the mongodb
container from mongo-seed
since I'd appended a ping -c 3 mongodb
to the CMD
and the container can resolve successfully that hostname.
Below the files I'm using:
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:3.2
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
mongo-seed/Dockerfile
FROM mongo:3.2
COPY init.json /init.json
CMD ping -c 3 mongodb && mongoimport --host mongodb --db test --collection users \
--type json --file /init.json --jsonArray
mongo-seed/init.json
[
{
"name": "Joe Smith",
"email": "[email protected]",
"age": 40,
"admin": false
},
{
"name": "Jen Ford",
"email": "[email protected]",
"age": 45,
"admin": true
}
]
And this the output of docker-compose up
:
mongo-seed_1 | PING mongodb (172.18.0.2): 48 data bytes
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.116 ms
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.141 ms
mongo-seed_1 | 56 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.114 ms
mongo-seed_1 | --- mongodb ping statistics ---
mongo-seed_1 | 3 packets transmitted, 3 packets received, 0% packet loss
mongo-seed_1 | round-trip min/avg/max/stddev = 0.114/0.124/0.141/0.000 ms
mongo-seed_1 | 2016-08-09T20:34:15.728+0000 [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 [........................] smtt.devices 0.0 B/25.5 MB (0.0%)
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 Failed: error connecting to db server: no reachable servers
mongo-seed_1 | 2016-08-09T20:34:17.992+0000 imported 0 documents
mongo_mongo-seed_1 exited with code 1
Any idea? What am I missing?
Setting up Our Containers docker run : Start a container from an image. -p 30001:27017 : Expose port 27017 in our container, as port 30001 on the localhost. --name mongo1 : name this container “mongo1” --net my-mongo-cluster : Add this container to the “my-mongo-cluster” network.
MongoDB can be run in a Docker container. There is an official image available on Docker Hub containing the MongoDB community edition, used in development environments. For production, you may custom-build a container with MongoDB's enterprise version.
Running MongoDB as a Docker Container If you need to access the MongoDB server from another application running locally, you will need to expose a port using the -p argument. Using this method, you will be able to connect to your MongoDB instance on mongodb://localhost:27017 .
For connecting to your local MongoDB instance from a Container you must first allow to accept connections from the Docker bridge gateway. To do so, simply add the respective gateway IP in the MongoDB config file /etc/mongod. conf under bindIp in the network interface section.
I could finally manage to get connected both containers. My findings here for documentation purposes.
docker-compose
version 2 creates a bridge
network and adds all the containers to it.mongod
is not aware of this network and therefore doesn't bind to that ip. By default, binds only to 127.0.0.1
mongoimport
could not establish connection using container name, even though it's supposed to be translated to the container ip.network
--bind_ip
flag pointing to that static ipmongoimport
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:3.2
ports:
- "27017:27017"
networks:
mongo_net:
ipv4_address: 172.16.0.1
command: mongod --bind_ip 127.0.0.1,172.16.0.1
mongo-seed:
build: ./mongo-seed
networks:
mongo_net:
depends_on:
- mongodb
networks:
mongo_net:
driver: bridge
ipam:
config:
- subnet: 172.16.0.0/24
gateway: 172.16.0.254
mongo-seed/Dockerfile
FROM mongo:3.2
COPY init.json /init.json
CMD mongoimport --host 172.16.0.1 --db test --collection users \
--type json --file /init.json --jsonArray
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With