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

How to import multiple different collections using mongo import in docker

我正在尝试将多个 json 文件导入到我的 mongo 数据库中的不同集合中,但只保留最后导入的集合。

这是我的 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 种子 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 中 cannot have more than one CMD instruction。当你这样做时,只有最后一个会被执行,这是设计使然。您可以在种子容器中做什么 -

  • 将 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.yaml中你可以这样配置:

version: "3.8"
services:
  mongo_db:
    image: mongo
    ports:
      - 27017:27017

  mongo-seed:
    build: .
    depends_on:
      - mongo_db