【问题标题】:How to import multiple different collections using mongo import in docker如何在 docker 中使用 mongo import 导入多个不同的集合
【发布时间】:2021-10-28 21:02:05
【问题描述】:

我正在尝试将多个 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-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

我在网上找不到任何关于如何将多个集合导入一个数据库的信息,我该怎么做?

【问题讨论】:

    标签: mongodb docker docker-compose dockerfile


    【解决方案1】:

    这是因为您在 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
    

    【讨论】:

    • 谢谢,它成功了:)。不知道每个 dockerfile 只能使用一个 CMD 命令
    • 正确,我已经更新了答案以参考官方文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2019-05-13
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多