Docker-compose: как подключиться к контейнеру Монго - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь запустить свое простое приложение на Ruby в контейнере Docker (я пользователь Windows 10). Это просто набор сценариев Ruby и bash, которые работают с базой данных Mongo. Я использую docker-compose, чтобы составить 3 контейнера - один для базы данных mongo (используя официальный образ mongo), один для моего приложения и один для заполнения базы данных.

Затем я запускаю команды docker-compose build и docker-compose up. Mongo просыпается нормально и принимает импорт данных. Затем я открываю другое окно Powershell и запускаю docker run -it <name> /bin/bash, чтобы получить интерактивную оболочку и запустить мой скрипт. К сожалению, по какой-то причине они не могут подключиться к Монго.

Моя строка подключения выглядит следующим образом:

@client = Mongo::Client.new([ 'mongodb:27017' ], :database => 'test')

Я пробовал разные версии, например mongodb, mongodb://mongodb:27017, mongodb://mongo:27017', но, похоже, ничего не работает. Когда я запускаю свой скрипт, он запускается в течение нескольких секунд, а затем выдает ошибку в первой строке, где я выполняю любую операцию над базой данных. Mongo не показывает никаких попыток подключения.

Что я делаю не так?

Dockerfile

FROM ruby:2.5
WORKDIR /usr/src/app
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .

Dockerfile с моносемями

FROM mongo
COPY test.csv /test.csv
CMD mongoimport --host mongodb -d test -c places --type csv --file /test.csv --headerline

докер-compose.yml

version: '3'
services:
  mongodb:
    container_name: mongodb
    image: mongo:latest
    volumes:
      - mongodata:/data/db
    ports:
      - 27017:27017
  web:
    build: .
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    links:
      - mongodb
    depends_on:
      - mongodb
    tty: true
  mongo-seed:
    build: ./mongo-seed
    links:
      - mongodb
volumes:
  mongodata:

1 Ответ

0 голосов
/ 15 мая 2018

Вместо того, чтобы порождать новый контейнер с docker run, подключитесь к оболочке уже запущенного с помощью docker exec -ti <name> bash.Теперь у вас должна быть возможность пропинговать вашу базу данных с помощью ping mongodb или выполнить ваш скрипт.

Причина этого в том, что новый созданный вами контейнер не создается в той же сети, что и ваша база данных.

https://docs.docker.com/compose/networking/ https://docs.docker.com/engine/reference/commandline/network_connect/

...