繁体   English   中英

如何将数据导入 docker-compose 中的 mongodb 服务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM