【问题标题】:NodeJS converting Docker Redis hostname to localhostNodeJS 将 Docker Redis 主机名转换为本地主机
【发布时间】:2022-11-22 12:29:54
【问题描述】:

似乎 Redis 容器主机名正在被 NodeJS 转换为本地主机。

这是我的文件:

.env

REDIS_HOST=redis-eventsystem
REDIS_PORT=6379
REDIS_SECRET=secret

索引.ts

// there are things above this
let Redis = require('redis');
let client : any = Redis.createClient({
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT,
  legacyMode: true
});
client.on('error', (err : Error) : void => {
  console.error(
    `Redis connection error: ${err}`
  );
});
client.on('connect', (err : Error) : void => {
  console.info(
    `Redis connection success.`
  );
});
client.connect();
// there are things bellow this

docker-compose.yml

version: '3.8'
services:
  eventsystem:
    image: eventsystem
    restart: always
    depends_on:
      - "redis-eventsystem"
    ports:
      - "80:3000"
    networks:
      - eventsystem
  redis-eventsystem:
    image: redis
    command: ["redis-server", "--bind", "redis-eventsystem", "--port", "6379", "--protected-mode", "no"]
    restart: always
    networks:
      - eventsystem
networks:
  eventsystem:
    driver: bridge

码头工人日志

2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:C 21 Nov 2022 20:50:41.106 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:C 21 Nov 2022 20:50:41.106 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:C 21 Nov 2022 20:50:41.106 # Configuration loaded
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:M 21 Nov 2022 20:50:41.106 * monotonic clock: POSIX clock_gettime
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:M 21 Nov 2022 20:50:41.108 * Running mode=standalone, port=6379.
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:M 21 Nov 2022 20:50:41.108 # Server initialized
2022-11-21 17:50:41 eventsystem-redis-eventsystem-1  | 1:M 21 Nov 2022 20:50:41.108 * Ready to accept connections
2022-11-21 17:50:41 eventsystem-eventsystem-1        | 
2022-11-21 17:50:41 eventsystem-eventsystem-1        | > eventsystem@1.0.0 start
2022-11-21 17:50:41 eventsystem-eventsystem-1        | > node index.js serve
2022-11-21 17:50:41 eventsystem-eventsystem-1        | 
2022-11-21 17:50:42 eventsystem-eventsystem-1        | Application is listening at http://localhost:3000
2022-11-21 17:50:42 eventsystem-eventsystem-1        | Mon Nov 21 2022 20:50:42 GMT+0000 (Coordinated Universal Time) - Redis connection error: Error: connect ECONNREFUSED 127.0.0.1:6379

正如你们所见,IP 127.0.0.1 的连接被拒绝,但在我的应用程序中,redis 设置为在包含 redis 服务器的容器的主机名上工作。我想不出任何可能导致此问题的原因。

【问题讨论】:

    标签: node.js docker docker-compose redis environment-variables


    【解决方案1】:

    所以回答我自己的问题,基本上问题与在我的代码中传递给createClient的变量有关。

    似乎由于某些未知原因,hostport 变量需要在createClient 参数对象内的名为socket 的变量中传递。

    因此,您必须执行以下操作,而不是像往常一样在参数对象中传递 hostport

    let client : any = Redis.createClient({
      host: process.env.REDIS_HOST,
      port: process.env.REDIS_PORT,
      socket: {
        host: process.env.REDIS_HOST,
        port: process.env.REDIS_PORT
      },
      legacyMode: true
    });
    

    希望能帮助到除了我以外的其他人。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多