簡體   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