node.js - 从AWS SAM中的 Node 应用程序连接到docker中的mongodb

标签 node.js mongodb docker aws-sam-cli

我从运行在AWS SAM 中的(过去说“在我的主机中”)的Nodejs应用程序连接到在Docker容器中运行的mongodb时出错。

我像这样运行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 Edition)成功连接并插入数据,并指定端口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)时,出现相同的错误。

更新

事实证明,我的代码未在主机上运行。它正在另一个Docker容器中运行。我没有意识到AWS SAM会将我的代码放入docker容器中,因此我没有在原始问题中提及它。

现在,我使用mocha test运行我的代码,以确保它可以在我的主机上运行,​​并且可以毫无问题地连接到mongo数据库。

当我使用AWS SAM的start-api启动本地服务器时,出现了问题。解决方案可能是在启动mongo容器以及SAM环境时指定一个网络。

最佳答案

既然已经知道问题所在,即Nodejs代码正在由AWS SAM创建的docker容器中运行,我们可以使用至少一种解决方案,帮助Nodejs代码与在单独的docker容器中运行的Mongodb连接,并在主机上暴露端口。

  • 将连接字符串更改为mongodb://host.docker.internal:27018,这有助于容器中的代码使用主机上运行的服务。
  • 关于node.js - 从AWS SAM中的 Node 应用程序连接到docker中的mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408661/

    相关文章:

    javascript - Nodejs/Javascript 当每个数字超过 15 位时获取起始数字和结束数字之间的数字

    django - 构建 python 镜像时出现 Docker compose 问题,访问被拒绝或存储库不存在

    MongoDB 按日期以字符串格式聚合不起作用

    node.js - 在 Mongoose 中通过给定的 _id 从数组中删除对象

    azure - Docker 推送给出 "blob upload unknown"

    Docker:访问wifi接口(interface)

    oracle - Node.js 甲骨文 ORM

    javascript - 从Windows批处理文件启动和停止node.js服务器

    node.js - buster.js 测试无法加载我的 js 文件

    javascript - Mongoose - 保存模型数组并 promise 全部