gpt4 book ai didi

node.js - nodejs 服务器无法在同一个 Docker-Compose yml 文件中链接 Redis 和 MongoDB

转载 作者:可可西里 更新时间:2023-11-01 09:48:31 25 4
gpt4 key购买 nike

我建立了一个快速服务器并链接到 mongo 数据库和 redis 数据库。
我分别使用了 docker run server/mongo/redis 并且服务器工作正常。
但是,当我使用 docker-compose 时,它显示错误

redisdb error: { Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 ....
MongoError: failed to connect to server [localhost:27017] on first connect ....

我使用 docker ps 检查,所有三个容器都在运行。

这是我的 docker-compose.yml

version: "2"
services:
mongo:
image: mongo:latest
ports:
- "27017:27017"
redis:
image: redis:latest
ports:
- "6379:6379"
web:
build: .
links:
- mongo
- redis
depends_on:
- mongo
- redis
ports:
- "3000:3000"

这里是我如何设置数据库连接

client = redis.createClient({ "host": process.env.REDIS_PORT_6379_TCP_ADDR || 'localhost', "port": "6379" });
mongoose.connect(`mongodb://${process.env.MONGO_PORT_27017_TCP_ADDR || 'mongodb://localhost:27017/chichat'}`);

我也尝试过 docker-compose stop && docker-compose rm && docker-compose up 但仍然失败。

最佳答案

您尝试连接到本地主机,而不是连接到 redis 或 mongo 容器。这是因为环境变量 REDIS_PORT_6379_TCP_ADDRMONGO_PORT_27017_TCP_ADDR 没有设置。

您有两种方法可以解决此问题:

1) 在您的应用程序中定义 redismongo 主机名。

client = redis.createClient({ "host":'redis', "port": "6379" });
mongoose.connect('mongodb://mongo:27017/chichat'});

2) 在docker-compose.yml文件中定义环境变量REDIS_PORT_6379_TCP_ADDRMONGO_PORT_27017_TCP_ADDR

version: "2"
services:
mongo:
image: mongo:latest
ports:
- "27017:27017"
redis:
image: redis:latest
ports:
- "6379:6379"
web:
build: .
links:
- mongo
- redis
depends_on:
- mongo
- redis
ports:
- "3000:3000"
environment:
- REDIS_PORT_6379_TCP_ADDR:"redis:6379"
- MONGO_PORT_27017_TCP_ADDR:"mongodb://mongo:27017"

第二种方式可能包含一些错误。我不认为 ULR 必须在 nodejs 中呈现到何种程度。

关于node.js - nodejs 服务器无法在同一个 Docker-Compose yml 文件中链接 Redis 和 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206021/

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