我尝试使用mongodb图像启动docker容器并导入默认的json设置。 我已经看到很多人推荐--host标志,但它似乎没有帮助。
version: '3'
services:
db:
image: mongo:3.4.1
build: db
ports:
- "27017:27017"
和dockerfile
FROM mongo
WORKDIR /usr/src/db
COPY init.json .
RUN mongod --bind_ip 127.0.0.1 --fork --logpath /var/log/mongodb.log
RUN mongorestore --host 127.0.0.1 --db test --collection users /usr/src/db/init.json
但是我收到了正常的消息
Step 5/5 : RUN mongorestore --host 127.0.0.1 --db test --collection users /usr/src/db/init.json
---> Running in f953a6fd5331
2018-01-17T23:16:54.854+0000 Failed: error connecting to db server: no reachable servers
ERROR: Service 'db' failed to build: The command '/bin/sh -c mongorestore --host 127.0.0.1 --db test --collection users /usr/src/db/init.json' returned a non-zero code: 1
我尝试了IP地址0.0.0.0,127.0.0.1,容器名称" db",有/无启动守护程序,在docker-compose和dockerfile之间以各种顺序运行命令但没有。
答案 0 :(得分:2)
经过多次挖掘,我找到了答案,为什么。 正如建议的docker启动容器,运行命令并关闭容器。数据不会持续存在,因此您可以创建默认设置,但它会在dockerfile的下一行丢失。
答案是在mongo启动时创建集合。
DockerFile
FROM mongo
WORKDIR /usr/src/data
COPY data.js /docker-entrypoint-initdb.d/
data.js
db = db.getSiblingDB('mycollection');
db.foo.insert({
"key": "value"
});
答案 1 :(得分:0)
您应该在同一个docker层中启动数据库和init shell:
RUN mongod --bind_ip 127.0.0.1 --fork --logpath /var/log/mongodb.log &&\
mongorestore --host 127.0.0.1 --db test --collection users /usr/src/db/init.json