Docker и MongoDB: запуск Mongo и импорт данных через Dockerfile - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно использовать 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).

1 Ответ

0 голосов
/ 22 мая 2019

Я нашел причину проблемы.Команда импорта выполняется до запуска службы Монго.Чтобы решить эту проблему, я создал скрипт .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"]
...