'Import Data on MongoDB using Docker-Compose
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?
Solution 1:[1]
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.
Solution 2:[2]
In my case, I put my json file into the data folder
mongoimport:
image: library/mongo:latest
container_name: my-import
volumes:
- ./data/orders.json:/src/data/orders.json
command: mongoimport --host mongodb --db my-mongo --collection orders --file /src/data/orders.json
mongodb:
image: library/mongo:latest
container_name: my-mongo
ports:
- 27017:27017
depends_on:
- mongoimport
restart: always
Solution 3:[3]
There is a lot of info about a seemingly "old" way of doing it. Using a bash script didn't look appealing for me either, so I decided to dig deeper and find a "proper" solution. Here it is:
https://hub.docker.com/_/mongo (section "Initializing a fresh instance")
Also: https://stackoverflow.com/a/42917632/2761550 (this one was surprisingly hard to find using search engines)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | 4b0 |
| Solution 2 | Roman Motovilov |
| Solution 3 | MathObsessed |
