【发布时间】:2021-02-16 16:45:13
【问题描述】:
我正在学习 docker 初学者课程 (https://www.youtube.com/watch?v=3c-iBn73dDE&t=4384s),我认为这门课程做得很好。
作为课程的一部分,应用程序与节点服务器和 js 前端组合在一起,与 docker 容器进行通信以实现 mongo db 和 mongo express 以实现持久性。
可以在https://gitlab.com/nanuchi/techworld-js-docker-demo-app/-/blob/master/app/server.js 找到节点应用程序。包含:
MongoClient.connect("mongodb://admin:password@mongodb:27017",
function (err, client) {
if (err) throw err;
var db = client.db('user-account');
userObj['userid'] = 1;
我有 2 个 docker 容器在 chromebook 上的 ubuntu 20.04 上运行(屏幕截图)。当我跑步时:
11@penguin:~/techworld-js-docker-demo-app/app$ nodejs server.js
app listening on port 3000!
但是当我打开浏览器到 localhost:3000 时,我得到:
(node:2716) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring pass option { useUnifiedTopology: true } to the MongoClient constructor.
/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/topologies/server.js:240
throw err;
^
MongoNetworkError: failed to connect to server [mongodb:27017] on first connect [MongoNetworkError: getaddrinfo EAI_AGAIN mongodb mongodb:27017]
at Pool.<anonymous> (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/topologies/server.js:431:11)
at Pool.emit (events.js:198:13)
at createConnection (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/connection/pool.js:559:14)
at connect (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/connection/pool.js:973:11)
at makeConnection (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/connection/connect.js:39:11)
at callback (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/connection/connect.js:261:5)
at Socket.err (/home/11/techworld-js-docker-demo-app/app/node_modules/mongodb/lib/core/connection/connect.js:286:7)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
我做错了什么?
编辑;为了清楚起见,我正在我的本地机器上运行节点项目(从我的 ubuntu 主目录),并且我正在尝试连接到 docker mongo 容器作为后端。作者可能跳过了她想如何运行 gitlab 项目(否则我误解了),但我假设她想在主机上运行它。她可能计划在容器中运行它,但由于它是在 gitlab 而不是 docker 上,我不知道如何将节点项目放入容器中..
【问题讨论】:
-
只是为了检查一下,您使用的是 mongo@3.6.x 吗?您可以通过运行
mongo进入 mongo shell 检查版本。 -
运行 'docker exec -it 87ac1b2c5cad bash' 然后 mongo 我得到了 4.4.1 版
-
你是如何启动你的mongodb实例的?看起来您正在尝试使用 docker 内部名称但从外部连接(在您的主机上运行的节点进程)