подключиться к mongodb в докере из приложения узла в AWS SAM - PullRequest
0 голосов
/ 01 июня 2019

Я получаю ошибки при подключении к mongodb, работающему в док-контейнере, из моего приложения Nodejs, запущенного в AWS SAM (раньше говорилось "на моем хосте").

Я запускаю mongodb как:

$ docker run --name mongo-myapp --rm -d -p 27018:27017 mongo

и я вижу результаты:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
ab8248d17d2d        mongo               "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        0.0.0.0:27018->27017/tcp   mongo-myapp

~~ Я могу успешно подключаться и вставлять данные с помощью клиентов, работающих на моем хосте, таких как MongoDB Compass и Robo 3T CommunityРедакция с указанием порта 27018. ~~

Когда я пытаюсь подключиться с помощью этого кода, работающего на моем хосте (не в контейнере Docker):

const { MongoClient } = require('mongodb');
const mongoConnection = 'mongodb://127.0.0.1:27018';
MongoClient.connect(mongoConnection, (err, db) => {
    if (err) {
        console.error("Failed to connect to mongodb server", err);
        return reject(err);
    }
    console.log("Connected successfully to mongodb server");
    resolve(db);
});

Я всегда вижуошибка:

MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27018

Я получаю ту же ошибку, используя другой порт со всеми шагами, как 27017.


ОБНОВЛЕНИЕ

Оказывается, мой код не работал на хосте.Он работал в другом докере.Я не знал, что AWS SAM поместит мой код в докер-контейнер, поэтому я не упомянул его в исходном вопросе.

Теперь я запускаю свой код с mocha test, чтобы убедиться, что онбудет работать на моем хосте, и он без проблем подключится к базе данных mongo.

Когда я запустил локальный сервер с помощью AWS SAM start-api , у меня возникли проблемы.Возможно, решением будет указать сеть при запуске контейнера mongo, а также среду SAM.

Ответы [ 3 ]

1 голос
/ 01 июня 2019

enter image description here

Установить необходимую зависимость для mongodb в node.js https://www.npmjs.com/package/mongodb

const MongoClient = require('mongodb').MongoClient;

const url = "mongodb://localhost:27018/testdb";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("Database created!");
  db.close();
});
0 голосов
/ 03 июня 2019

Теперь, когда проблема известна тем, что код Nodejs выполнялся в док-контейнере, созданном AWS SAM, мы можем помочь коду Nodejs подключиться к Mongodb, работающему в отдельном контейнере Docker, с портом, доступным на хосте, по крайней мере с одним решение:

  1. Измените строку подключения на mongodb://host.docker.internal:27018, которая помогает коду в контейнере использовать службу, запущенную на хосте.
0 голосов
/ 01 июня 2019

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

Можете ли вы вместо этого попробовать подключиться к ip хоста?из 127.0.0.1

Например: mongodb: // external-ip: 27018

Хотя отображение -p 27018: 27017 должно связывать порт со всеми ips, вы можете применить это с помощью -p0.0.0.0:27018:27017.

...