【问题标题】:How can one import data into a mongodb service in docker-compose如何将数据导入 docker-compose 中的 mongodb 服务
【发布时间】:2021-10-29 03:16:38
【问题描述】:

我在 docker-compose 中使用 mongodb 作为服务时遇到了问题。我设法通过卷文件夹在data/db/ 将数据插入其容器(例如csv、txt 和json 文件),但我仍然可以t use it as a collection. I believe I should use the function 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

有人可以帮我找一个替代品吗? 提前致谢。

【问题讨论】:

    标签: mongodb docker-compose


    【解决方案1】:

    问题是您正在覆盖 mongo 映像的默认 CMD(它正在运行 db 服务 - CMD ["mongod"])。这使得容器无法连接到自身)。另外我认为 mongo 的默认端口是 27017,而不是 27107。

    我见过人们使用单独的容器将数据播种到数据库中,它所做的一切 - 它运行 mongoimport 来填充数据然后死掉。你可以试试这种方法。检查this answer,这可能会给你一个想法。

    【讨论】:

      【解决方案2】:

      如果您只想导入一次,我建议您创建一个自己的图像:

      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 命令,例如添加用户、数据库或插入数据等。

      编辑: 小脑虫。应该在docker-entrypoint-initdb.d 中做RUN 的东西,以确保它只做了一次。如果 db-folder 存在,则不执行入口点脚本。因此:

      COPY mongodb.js prefill.sh /docker-entrypoint-initdb.d/
      

      prefill.sh

      #!/bin/bash
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多