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