There are many sites that show how to import data to a mongodb using the below docker-compose method but mine is not finding the db server.
How do I seed a mongo database using docker-compose? https://gist.github.com/jschwarty/6f9907e2871d1ece5bde53d259c18d5f https://docs.codefresh.io/v1.0/docs/import-data-to-mongodb-in-composition
Wondering if something has changed making this not work any longer.
docker-compose.yml
version: '3'
services:
mongodb:
image: mongo
command: mongod --smallfiles
ports:
- 27017
mongo_seed:
build: mongo-seed/.
links:
- mongodb
mongo-seed/Dockerfile
FROM mongo
COPY census.json /census.json
CMD mongoimport --host mongodb --db test --collection census --type json --file /census.json --jsonArray
mongo-seed/census.json
[
{
"Geography": "Abbeville city, Alabama",
"Census": "2688"
}
]
ERROR after docker-compose up
mongodb_1 | 2018-01-09T21:57:14.353+0000 I NETWORK [initandlisten] waiting for connections on port 27017
mongo_seed_1 | 2018-01-10T00:19:58.286+0000 [........................] test.census 0B/1KB (0.0%)
mongo_seed_1 | 2018-01-10T00:19:58.332+0000 [........................] test.census 0B/1KB (0.0%)
mongo_seed_1 | 2018-01-10T00:19:58.332+0000 Failed: error connecting to db server: no reachable servers
mongo_seed_1 | 2018-01-10T00:19:58.332+0000 imported 0 documents
In the mongoimport statement, I have tried using different host names: mongodb_1, 127.0.0.1, localhost.
I have read that if replSet is set it can give this error but I'm not setting replSet unless it's default in which case I don't know how it disable it.
I have also tried mongorestore instead of mongoimport but get the same error.
I have read since link is deprecated in Docker that maybe environmental variables are no longer working. Not sure if that is true or happening here.
Does anyone have ideas?
To import data to a MongoDB database, you can use mongoimport to import specific collections data, or you can use mongorestore to import a binary (BSON) full database backup. The exported database file must be stored locally on the same machine as your client.
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.
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 ended up removing the Dockerfile, adding the commands in a bash script, then calling the script from the docker-compose file. Used a script rather than one command in the docker-compose file because I'm importing several files thus several commands that are not shown in my example. I needed to use mongo:3.2.6 to make this work. There may be other versions but this one works for sure.
docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:3.2.6
ports:
- 27017:27017
mongo_seed:
image: mongo:3.2.6
links:
- mongodb
volumes:
- ./mongo-seed:/mongo-seed
command:
/mongo-seed/import.sh
/mongo-seed/import.sh
#! /bin/bash
mongoimport --host mongodb --db test --collection census --type json --file /mongo-seed/census.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