[英]How can one import data into a mongodb service in docker-compose
我在 docker-compose 中使用 mongodb 作为服务时遇到问题。 我已经设法通过卷文件夹将数据插入到它的容器(例如 csv、txt 和 json 文件)中的 data/db/ 中,但我仍然无法将其用作集合。 我相信我应该使用 mongoimport 函数,但它无法连接到主机。 一切似乎都很好,但主人。 我已经尝试了很多其他地址作为主机,但都没有奏效。
波纹管是我的 docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:3.6
container_name: mongodb
restart: on-failure
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=example
volumes:
- ./mongodbvol:/data/db
ports:
- "27107:27107"
command:
mongoimport --host http://0.0.0.0:27017 -c col1 --type csv --file /data/db/tt.csv --headerline
mongo-express:
image: mongo-express
container_name: mongo-express
restart: on-failure
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ADMINUSERNAME=root
- ME_CONFIG_MONGODB_ADMINPASSWORD=example
- ME_CONFIG_BASICAUTH_USERNAME=necode
- ME_CONFIG_BASICAUTH_PASSWORD=passwd
ports:
- "8081:8081"
depends_on:
- mongodb
rshiny:
image: guigo13/app
container_name: rshiny
restart: on-failure
command: R -e "shiny::runApp('R/app.R', host = '0.0.0.0', port = 3838)"
environment:
- DB_URI=mongodb
- DB_USERNAME=root
- DB_PASSWORD=example
- DB_NAME=appdb
- DB_HOST=mongodb
- DB_PORT=27017
ports:
- "3838:3838"
- "3839:3838"
depends_on:
- mongodb
这是日志中的错误
mongodb | 2021-10-29T02:51:09.170+0000 [########################] test.col1 11B/11B (100.0%)
mongodb | 2021-10-29T02:51:09.685+0000 [########################] test.col1 11B/11B (100.0%)
mongodb | 2021-10-29T02:51:09.685+0000 Failed: error connecting to db server: no reachable servers
mongodb | 2021-10-29T02:51:09.685+0000 imported 0 documents
请问有人可以给我一个替代方案吗? 提前致谢。
问题是您正在覆盖 mongo 映像(正在运行 db 服务 - CMD [“mongod”])的默认 CMD。 这使得容器无法连接到自身)。 另外我认为 mongo 的默认端口是 27017,而不是 27107。
我见过有人使用单独的容器将数据播种到数据库中,它所做的一切 - 它运行 mongoimport 来填充数据,然后死亡。 你可以试试这个方法。 检查这个答案,这可能会给你一个想法。
如果您只想导入一次,我建议您创建一个自己的图像:
Dockerfile:
FROM mongo:versiontag
ENV MONGO_INITDB_ROOT_USERNAME root
ENV MONGO_INITDB_ROOT_PASSWORD example
ENV MONGO_INITDB_DATABASE mydb
COPY mongodb.js /docker-entrypoint-initdb.d/
RUN mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport -c=users -d=acrc --mode=upsert --file=/opt/acrc/config/users.json && \
mongoimport -c=tasks -d=acrc --mode=upsert --file=/opt/acrc/config/tasks.json && \
mongoimport -c=configs -d=acrc --mode=upsert --file=/opt/acrc/config/configs.json && \
mongoimport -c=agentGroupConfigs -d=acrc --mode=upsert --file=/opt/acrc/config/agentGroupConfigs.json && \
mongoimport -c=col1 --type=csv --file=/data/db/tt.csv --headerline
它在创建容器的同时启动 mongo 并填充它。
在 mongodb.js 中,您可以编写其他mongosh
命令的脚本,例如添加用户、数据库或插入数据等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.