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

如何使用docker compose将json导入mongo?,json,mongodb,docker,Json,Mongodb,Docker,我正在尝试用mongodb映像启动docker容器,并导入默认的json集。 我见过很多人推荐——主机标志,但它似乎没有帮助 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 mon

我正在尝试用mongodb映像启动docker容器,并导入默认的json集。 我见过很多人推荐——主机标志,但它似乎没有帮助

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、127.0.0.1,容器名“db”,有/没有启动守护进程,在docker compose和dockerfile之间以各种顺序运行命令,但什么都没有

应该在同一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

经过反复挖掘,我找到了答案,以及原因。 按照建议,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"
});