Подключение к MongoDB в Docker из внешнего приложения - PullRequest
0 голосов
/ 26 сентября 2018

Можно ли подключиться к Docker-контейнеру, на котором запущен образ MongoDB, из внешнего приложения nodejs, работающего локально?Я попытался соединиться через localhost: 27017.Вот файл компоновки докера, который я использую:

version: '3'
services:
  mongodb:
    image: 'bitnami/mongodb:3.6.8'
    ports:
      - "27017:27017"
    environment:
      - MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD
      - MONGODB_USERNAME=$MONGODB_USERNAME
      - MONGODB_PASSWORD=$MONGODB_PASSWORD
      - MONGODB_DATABASE=$MONGODB_DATABASE
    volumes:
      - /data/db:/bitnami

Я пытаюсь подключиться к нему с помощью следующего URL безуспешно:

mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@localhost:27017

РЕДАКТИРОВАТЬ: Подключениечерез mongodb: // localhost: 27017 работает, но ошибка аутентификации URL.Я распечатал результат этой строки, и в этом нет ничего особенно плохого.Я проверил, что имя пользователя и пароль соответствуют пользователям внутри Монго в контейнере Docker.

app.listen(port, () => {
  console.log(`Example app listening on port ${port}!`);
  const url = (() => {
    if(process.env.MONGODB_USERNAME && process.env.MONGODB_PASSWORD) {
      return `mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@localhost:27017/`;
    }
    console.log('could not find environment vars for mongodb');
  })();

  MongoClient.connect(url, (err, client) => {
    if(err) {
      console.log('DB connection error');
    } else {
      console.log("Connected successfully to server");
      client.close();
    }
  });
});

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Важно всегда проверять результат docker logs <container-name> --tail 25 -f.С моей точки зрения, я думаю, что это проблема, связанная с разрешениями для этого каталога '/ bitnami / mongodb'.Прочтите sameersbn comment , как исправить эту проблему с разрешениями.

Тогда я предполагаю, что это спецификация compose.Попробуйте следующую конфигурацию

 environment:
   MONGODB_ROOT_PASSWORD:$MONGODB_ROOT_PASSWORD
   MONGODB_USERNAME:$MONGODB_USERNAME
   MONGODB_PASSWORD:$MONGODB_PASSWORD
   MONGODB_DATABASE:$MONGODB_DATABASE
 volumes:
   - '/data/db:/data/db'
0 голосов
/ 02 октября 2018

Проблема оказалась в том, что я изменил пароль в MONGODB_PASSWORD (в нем был символ @, поэтому я подумал, что это помешает синтаксическому анализу строки, поэтому я изменил его).Проблема в том, что когда контейнер перезапускается, он ссылается на тот же том (как и должен), поэтому пользователи никогда не обновлялись, и в результате я входил в систему с неверными учетными данными.

0 голосов
/ 26 сентября 2018

Если внешнее приложение nodejs также выполняется в контейнере Docker, необходимо связать контейнеры.Вот пример запуска команды docker, которая связывает контейнеры.Я добавил переменные окружения, чтобы проиллюстрировать, какое имя хоста и порт вы будете использовать внутри контейнера.

    docker run -d -it -e DEST_PORT=27017 -e DEST_HOST='mongodb' --link mongodb external-application:latest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...