【发布时间】:2020-12-07 18:56:20
【问题描述】:
我在本地机器上将 MongoDB 作为独立服务器运行。我的快速应用程序可以很好地连接到它,除非它在容器中运行。在我的连接字符串中,我尝试使用我的机器的 IP、localhost 和 127.0.0.1,但都没有工作。我还尝试在 mongo 配置文件中将端口 27017 绑定到 0.0.0.0 ,但这也不起作用。最后,我尝试在 docker run 命令中使用 --network="host" 选项,但没有帮助。这是我运行容器时遇到的错误:
MongoNetworkError:首次连接时无法连接到服务器 [127.0.0.1:27017] [错误:连接 ECONNREFUSED 127.0.0.1:27017
码头工人文件
FROM node
RUN mkdir -p /usr/src/rapidrecipes
COPY server.js /usr/src/rapidrecipes/server.js
COPY deploy-package.json /usr/src/rapidrecipes/package.json
WORKDIR /usr/src/rapidrecipes
RUN npm install
EXPOSE 80
EXPOSE 27017
EXPOSE 3000
CMD ["node", "server.js"]
运行命令
docker run -p 80:80 -p 27017:27017 -p 3000:3000 快速食谱
SERVER.JS 文件摘录
var express = require('express');
var cors = require('cors');
var path = require('path');
var bodyParser = require('body-parser');
var mongo = require('mongoose');
const uuid = require('uuid');
var db = mongo.connect("mongodb://127.0.0.1:27017/recipedb", function (err, response) {
if (err) { console.log(err); }
else { console.log('Connected to ' + db, ' + ', response) }
});
【问题讨论】:
-
我认为您必须在 mongo connect URL 中添加您机器的实际 IP 而不是 127.0.0.1。
-
我提到我已经尝试过了。
-
尝试运行 docker ps 来检查容器是否真正启动并运行。
-
是的,它正在运行
-
嗯,你能从容器内部连接到MongoDB吗,使用
nc、telnet等?在容器内部, 127.0.0.1 / localhost 并不意味着您的主机系统。尝试使用运行 MongoDB 的 Docker 主机服务器的主机名,只是为了测试,因为这是错误的方法,你会得到它。