Import Data on MongoDB using Docker-Compose
Solution 1
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
Solution 2
You are seeing that Permission denied because you didn't mark the .sh
file as executable. Just run chmod +x file.sh
and then run again the whole docker-compose up.
Ben Pingilley
Updated on June 07, 2022Comments
-
Ben Pingilley about 2 years
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?
-
james over 5 yearsif you wanted to also run another script like mongo --host mongodb /mongo-seed/createuser.js, that just contains a use admin; db.createUser({etc..}... how would you incorporate that into that import.sh file?
-
Yashwanth Kambala about 5 yearsI am geeting
/usr/local/bin/docker-entrypoint.sh: line 354: /mongo-seed/import.sh: Permission denied
.any help -
cs_pupil over 2 yearsFor Permission denied:
chmod +x mongo-seed/import.sh
-
Ahmed Aziz over 2 yearsI got the same error that you had after I did what you suggested here. But by removing the version number 3.2.6, everything worked fine
-
Ebram Shehata about 2 yearsI'm always getting: error connecting to host:
could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.
Even if I'm running the command manually inside themongodb
container !!