【问题标题】:Docker and MongoDB: Start Mongo and Import Data via DockerfileDocker 和 MongoDB:启动 Mongo 并通过 Dockerfile 导入数据
【发布时间】:2019-05-20 16:16:04
【问题描述】:

我需要将 MongoDB 与 Docker 一起使用。到目前为止,我能够创建一个容器,启动 Mongo 服务器并从主机访问它(通过 Compass)。 我接下来要做的是将脚本中的数据导入到容器中运行的 Mongo 数据库中。 尝试导入数据时出现以下错误:

失败:连接到数据库服务器时出错:没有可访问的服务器

我在做什么……

docker-compose.yml:

version: '3.7'

services:

  mongodb:
    container_name: mongodb_db
    build:
      context: .
      dockerfile: .docker/db/Dockerfile
      args:
        DB_IMAGE: mongo:4.0.9
    ports:
      - 30001:27017
    environment:
      MONGO_DATA_DIR: /data/db
      MONGO_LOG_DIR: /dev/null

  db_seed:
    build:
      context: .
      dockerfile: .docker/db/seed/Dockerfile
      args:
        DB_IMAGE: mongo:4.0.9
    links:
      - mongodb

mongodb Dockerfile:

ARG DB_IMAGE

FROM ${DB_IMAGE}

CMD ["mongod", "--smallfiles"]

db_seedDockerfile:

ARG DB_IMAGE

FROM ${DB_IMAGE}

RUN mkdir -p /srv/tmp/import
COPY ./app/import /srv/tmp/import

# set working directory
WORKDIR /srv/tmp/import
RUN mongoimport -h mongodb -d dbName--type csv --headerline -c categories --file=categories.csv #Failed: error connecting to db server: no reachable servers
RUN mongo mongodb/dbName script.js

我在这里做错了什么?我该如何解决这个问题? 我想保留当前的文件组织(docker-compose、mongodb Dockerfile 和 db_seed Dockerfile)。

【问题讨论】:

    标签: mongodb docker docker-compose dockerfile mongoimport


    【解决方案1】:

    我找到了问题的原因。 import 命令在 mongo 服务启动之前执行。 为了解决这个问题,我使用导入命令创建了一个 .sh 脚本并使用 ENTRYPOINT 执行它。这样脚本只会在 db_seed 容器创建后执行。由于db_seed容器依赖于mongobd容器,所以只有在mongo服务启动后才会执行脚本。

    db_seedDockerfile

    ARG DB_IMAGE
    
    FROM ${DB_IMAGE}
    
    
    RUN mkdir -p /srv/tmp/import
    COPY ./app/import /srv/tmp/import
    
    ENTRYPOINT ["./srv/tmp/import/import.sh"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多