gpt4 book ai didi

node.js - Node 应用程序无法连接到 MongoDB,但仅在 Docker 中

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:54 24 4
gpt4 key购买 nike

我有两个应用程序:

当我的 Node 应用程序本地运行时,这两个应用程序可以完美地交互。现在我已将其放入 Docker 容器中,当我使用 docker compose up 一起启动两者时,后端无法连接到 MongoDB。

这是启动序列的摘录:

mongodb_1   | 2018-11-10T22:22:52.481+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
[...]
backend_1 | 2018-11-10T22:23:48.119Z 'MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]'

这是我的docker-compose.yml:

version: '2'
services:

mongodb:
image: bitnami/mongodb:latest
expose:
- 27017
environment:
- ALLOW_EMPTY_PASSWORD=yes

backend:
build: ./backend
environment:
API_HOST: http://localhost:3000/
APP_SERVER_PORT: 3000
expose:
- 3000
volumes:
- ./backend:/app/backend
links:
- mongodb
depends_on:
- mongodb

这是我对数据库的 Node 调用:

mongoose.connect('mongodb://localhost:27017/groceryList', {
useNewUrlParser: true
});

我浏览了大约 15 个 Stackoverflow 问题,提出了同样的问题,但我没有找到原因:

  • 当我的 Node 应用程序尝试这样做时,并不是说 MongoDB 还没有准备好连接。我将连接调用包装为自动重新连接功能如所述here并且错误不断地重复。这不仅仅是“第一连接”。
  • 我可以发布 MongoDB 容器的端口 27017 并且愉快地联系Robo3T 。数据库肯定在工作。
  • 当我连接到 mongodb://mongo:27017/groceryList 时,同样适用,只是使用 ENOTFOUND 标志而不是 ECONNREFUSED

我错过了什么?

  • Docker 18.06.1-ce
  • docker-compose 1.22.0
  • Mongoose 5.3.6
  • MongoDB 4.0.3
  • Node 11.1.0
  • macOS 10.14.1

最佳答案

您的 mongodb 服务名为 mongodb 而不是 mongo

尝试

mongoose.connect('mongodb://mongodb:27017/groceryList', {
useNewUrlParser: true
});

通用形式为'mongodb://mongoServiceName:27017/dbname',这使用docker对同一网络内的容器的自动dns解析。

正如您可能已经从其他问题/答案中知道的那样,在容器内,url 是相对于其自身的,因此由于后端容器内没有运行 mongodb,因此它无法连接到它。

关于node.js - Node 应用程序无法连接到 MongoDB,但仅在 Docker 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com