如何在docker中使用mongo import导入多个不同的集合



我试图在我的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

最新更新