如何使用docker-compose将json导入mongo?

时间:2018-01-17 23:29:42

标签: json mongodb docker

我尝试使用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之间以各种顺序运行命令但没有。

2 个答案:

答案 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