我试图在我的mongo数据库中导入多个json文件到不同的集合中,但只保留最后导入的集合。
这是我的docker-compose.yml:
version: "3.7"
services:
api:
build: .
restart: always
ports:
- 8080:8080
depends_on:
- mongo-seed
mongo-seed:
build: ./mongo
depends_on:
- mongo_db
mongo_db:
image: "mongo:4.4.3"
restart: always
environment:
- MONGO_INITDB_DATABASE="mongo_db"
ports:
- 27017:27017
和mongo-seed Dockerfile:
FROM mongo
COPY ./data/users.json /users.json
CMD mongoimport --drop --host mongo_db --db aada_backend --collection users --type json --file /users.json --jsonArray
COPY ./data/headphones.json /headphones.json
CMD mongoimport --drop --host mongo_db --db aada_backend --collection headphones --type json --file /headphones.json --jsonArray
COPY ./data/earbuds.json earbuds.json
CMD mongoimport --drop --host mongo_db --db aada_backend --collection earbuds --type json --file /earbuds.json --jsonArray
我在网上找不到关于如何将多个集合导入一个数据库的任何内容,我该如何做到这一点?
这是因为你不能在Dockerfile中有多个CMD指令。当您这样做时,只执行最后一个,这是设计的。你可以在种子容器内做什么-
- 复制json到种子容器
- 将包含mongoimport命令的shell脚本复制到种子容器
- 让CMD命令行执行此脚本。例如:
FROM mongo
WORKDIR /jsondata
COPY ./jsondata/ .
COPY ./seed.sh .
RUN chmod +x seed.sh
CMD ["sh", "-c", "/jsondata/seed.sh"]
然后在docker-compose中。您可以这样配置它:
version: "3.8"
services:
mongo_db:
image: mongo
ports:
- 27017:27017
mongo-seed:
build: .
depends_on:
- mongo_db