【发布时间】:2019-06-03 09:12:43
【问题描述】:
我从运行在 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 社区版)成功连接和插入数据,指定端口 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 环境时指定一个网络。
【问题讨论】:
-
你是使用 Docker Toolbox 还是 Docker Machine?
-
@DavidMaze 不,只是适用于 Mac 的 Docker 桌面,就像任何 docker 应用程序一样。
-
你有其他版本的 MongoDB 或 mongod 在 Mac 上运行吗? (除了 Docker 镜像)
-
@KevinPrasannaRR 不,我也可以通过在我的主机上运行的其他客户端访问它。
-
哦,太好了,您能够解决它。由于您发布的代码本身不会出现任何问题。
标签: node.js mongodb docker aws-sam-cli