Docker环境下如何使用mongoimport导入多个不同的MongoDB集合
问题根因
Dockerfile 中CMD指令仅最后一条会生效,容器启动时只会执行最后一条导入earbuds集合的命令,前面两个集合的导入指令被覆盖未执行,因此仅保留最后一次导入的集合。
解决方案
步骤1:创建导入脚本
在./mongo(即mongo-seed的Dockerfile所在目录)下新建import.sh脚本,内容如下:
#!/bin/bash # 等待MongoDB服务就绪,避免因数据库未启动导致导入失败 until mongo --host mongo_db --eval "print(\"connection success\")" do sleep 2 done # 依次导入三个集合 mongoimport --drop --host mongo_db --db aada_backend --collection users --type json --file /users.json --jsonArray mongoimport --drop --host mongo_db --db aada_backend --collection headphones --type json --file /headphones.json --jsonArray mongoimport --drop --host mongo_db --db aada_backend --collection earbuds --type json --file /earbuds.json --jsonArray
步骤2:修改mongo-seed的Dockerfile
调整后的Dockerfile内容如下:
FROM mongo # 拷贝所有数据文件到容器内 COPY ./data/users.json /users.json COPY ./data/headphones.json /headphones.json COPY ./data/earbuds.json /earbuds.json # 拷贝导入脚本并赋予执行权限 COPY import.sh /import.sh RUN chmod +x /import.sh # 容器启动时执行导入脚本 CMD ["/import.sh"]
注意事项
你当前docker-compose中配置的MONGO_INITDB_DATABASE默认库为mongo_db,但导入命令指定的库为aada_backend,如果是误写可将脚本中所有--db aada_backend替换为--db mongo_db即可。
内容的提问来源于stack exchange,提问作者stenterstal
相关产品推荐
相关产品推荐

