【发布时间】:2020-01-06 15:31:41
【问题描述】:
我正在尝试切换到 docker,由于某种原因,我的 Node.js 应用程序无法连接到在 docker 上运行的 redis。
这是我的 docker compose:
version: "3"
services:
chatty-backend:
container_name: chatty-backend
build: ./
volumes:
- ./:/usr/src/chatty-backend
command: npm start
working_dir: /usr/src/chatty-backend
ports:
- "5000:5000"
links:
- redis
- mongo
depends_on:
- redis
- mongo
mongo:
image: mongo:bionic
ports:
- "27017:27017"
redis:
image: redis
ports:
- "6379:6379"
command:
redis-server
这是我连接到 redis 的地方:
import * as Redis from 'ioredis';
const redis = new Redis({ host: 'redis', port: 6379 });
export default redis;
也试过new Redis('redis://redis:6379')
我目前收到此错误:
Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1056:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
【问题讨论】:
-
据我记得,docker compose v3 不推荐使用链接。尝试在 `chatty-backend` 服务定义中不使用链接设置运行。另外,当您在 docker 容器中启动应用程序时,您是否收到提到的错误?或者当你在主机上启动它时?错误意味着 redis 客户端尝试连接到在
127.0.0.1:6379上侦听的 redis 服务器,而不是在redis:6379上 - 可能,您在 nodejs 应用程序的配置中定义了错误的东西? -
我认为链接尚未被弃用,但您应该使用网络而不是链接,因为这是计划中的弃用。但正如您所看到的,chatty-backend 并没有尝试连接到
redis,而是尝试连接到127.0.0.1,这需要在您的代码中进行修复(它认为它正在连接到本地机器)。
标签: node.js redis docker-compose