Docker-контейнер mongo не может получить доступ к данным localhost - PullRequest
0 голосов
/ 24 октября 2019

Я начал создавать POC для приложения, и оно генерировало много полезных данных в mongodb, который был размещен на localhost . Я подключился к этим данным, используя mongoshell и MongoDb Compass.

Недавно я разделил приложение монолита на набор микросервисов и ввел в него докер. Также добавлен монго в docker-compose в качестве зависимости. Все микросервисы и контейнер Монго были в состоянии запустить и запустить логику.

Однако приложение не нашло никаких ссылок на старые данные, так как в размещенном контейнере mongodb отсутствовали коллекции localhost. Он ведет себя как свежая база данных. Я не сделал никаких изменений со ссылкой на ipBinding

Файл подключения mongodb в приложении указывает на контейнер mongodb (ранее это был mongodb://localhost:27017/${dbName}).

docker-compose:

version: '3'
services:
  mongo:
    image: 'mongo'
    ports:
       - "27017:27017"

  some-api:
    build: ./some-api
    ports:
      - 8005:8105

Файл подключения Mongodb:

        const url = `mongodb://mongo:27017/${dbName}`;

        const client = await MongoClient.connect(url, { useNewUrlParser: true });

Итак, мне нужна помощь с 3 вопросами:

  1. Как контейнер mongo использует данные localhost или указывает на эти данные?
  2. Как сохранить данные, сгенерированные из докер-контейнеров, когда контейнер выключается и по-прежнему видит их на сервере localhost mongo?
  3. Поскольку контейнер mongo работает на Ip, могу ли я использовать этот ip дляподключить его с помощью Mongo Compass после запуска и запуска контейнера?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Все контейнеры являются изолированным миром от вашего хост-сервера, поэтому они не имеют доступа к каким-либо данным на вашем хосте.

Вы можете обойти это, используя связанные тома (https://docs.docker.com/compose/compose-file/#volumes), вам также может понадобитьсячтобы просмотреть документацию по изображениям монго (https://hub.docker.com/_/mongo PS .: перейдите в раздел «Где хранить данные»)

После создания тома вы можете указать его на старые данные, но будьте осторожны, вынеобходимо использовать ту же версию Монго, чтобы ваши данные не были повреждены.

0 голосов
/ 24 октября 2019

Контейнер mongo по умолчанию не использует данные вашего локального хоста (значение контейнеризации заключается в том, что все отдельно), но вы можете связать его с данными, используя тома докера . Вам нужно будет знать, где находятся ваши локальные монго-файлы и где они должны находиться в операционной системе контейнера, и, возможно, потребуется использовать один и тот же механизм хранения локально и в контейнере.

Ваш докер-композиция будет выглядеть примерно так:

version: '3'
services:
  mongo:
    image: 'mongo'
    volumes:
      - "/local/path/to/mongo/files/:/container/path/to/mongo/files/"
    ports:
      - "27017:27017"

  some-api:
    build: ./some-api
    ports:
      - 8005:8105
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...