首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS将Docker主机名转换为本地主机

NodeJS将Docker主机名转换为本地主机
EN

Stack Overflow用户
提问于 2022-11-21 21:07:44
回答 1查看 18关注 0票数 0

看起来,NodeJS正在将Redis容器主机名转换为本地主机。

这是我的档案:

.env

代码语言:javascript
复制
REDIS_HOST=redis-eventsystem
REDIS_PORT=6379
REDIS_SECRET=secret

index.ts

代码语言:javascript
复制
// 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

代码语言:javascript
复制
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

码头日志

代码语言:javascript
复制
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服务器的容器的主机名。我想不出有什么能引起这个问题的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 22:34:39

因此,为了回答我自己的问题,问题基本上与在我的代码中传递到createClient上的变量有关。

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

因此,不必执行通常的操作,而是在参数对象中传递hostport,而必须执行以下操作:

代码语言:javascript
复制
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
});

希望能帮助除我之外的其他人。

干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74524898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档