有许多网站展示了如何使用以下 docker-compose 方法将数据导入 mongodb,但我的网站没有找到 db 服务器。
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
想知道是否发生了变化,使其不再起作用。
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"
}
]
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
在 mongoimport 语句中,我尝试过使用不同的主机名:mongodb_1、127.0.0.1、localhost.
我已经读过,如果 replSet 被设置,它会给出这个错误,但我没有设置 replSet 除非它是默认值,在这种情况下我不知道它是如何设置的禁用它。
我也尝试过 mongorestore 而不是 mongoimport 但得到了同样的错误。
自从 link 在 Docker 中被弃用后,我已经读到可能环境变量不再起作用。不确定这是真的还是发生在这里。
有人有想法吗?
最佳答案
我最终删除了 Dockerfile,在 bash 脚本中添加命令,然后从 docker-compose 文件中调用脚本。在 docker-compose 文件中使用了一个脚本而不是一个命令,因为我正在导入几个文件,因此我的示例中没有显示几个命令。我需要使用 mongo:3.2.6 来完成这项工作。可能还有其他版本,但这个版本肯定有效。
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
关于mongodb - 使用 Docker-Compose 在 MongoDB 上导入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48178870/