首页 > 解决方案 > Docker、NodeJs、Redis - Redis 正常运行但抛出错误

问题描述

我正在使用以下 docker-compose 文件运行 Docker:

version: "2"
services:
  redis:
    image: "redis"
    command: ["redis-server", "--appendonly", "yes"]
    hostname: redis
  vapp:
    build: .
    command: npm run nodemon-test
    container_name: vapp
    volumes:
    - .:/home/tringuyen/app
    - /home/tringuyen/app/node_modules
    - /abi:/abi
    ports:
    - "3000:3000"
    links:
    - redis:redis
    depends_on:
    - redis

一切运行正常,我可以验证 redis 正在运行,NodeJs 中的 redis 主机也更新为redis. 但是这个错误一直吐出来,有谁知道是什么原因以及如何解决它?谢谢。

vapp         | Uncaught Exception:  { Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
vapp         |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
vapp         |   errno: 'ECONNREFUSED',
vapp         |   code: 'ECONNREFUSED',
vapp         |   syscall: 'connect',
vapp         |   address: '127.0.0.1',
vapp         |   port: 6379 }

标签: node.jsdockerredisdocker-compose

解决方案


您需要在 nodejs 应用程序中替换localhostredis以引用您的数据库服务器。

此外,您不需要 docker-compose.yml 中的“链接”部分。(它将很快被弃用)

如果你说你已经这样做了,那么你的容器仍然使用旧图像。因此,请尝试通过删除任何容器和卷来清理您的环境,并确保镜像已重建 ( docker-compose up --build)。

当应用程序启动时,在该容器中打开一个 shell 并验证您定义数据库名称的文件是否确实已更新。


推荐阅读