我从运行在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/