【问题标题】:How to fix "Error: getaddrinfo ENOTFOUND redis" on docker?如何修复 docker 上的“错误:getaddrinfo ENOTFOUND redis”?
【发布时间】:2022-08-11 08:05:44
【问题描述】:

我正在使用Redis 使用NestJS,我看到以下错误。我正在浏览不同的文章,如here,看起来我也在关注相同的内容,但仍然出现此错误。

脚步:

  • 我使用了docker compose up 命令
  • 确保redis.module.ts 中的主机与docker-compose.yml 中的服务名称相同,即redis

我在这里想念什么?

错误:

Error: getaddrinfo ENOTFOUND redis

    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26)

代码:

redis.module.ts

import { CacheModule, Module } from \'@nestjs/common\';
import { ConfigModule, ConfigService } from \'@nestjs/config\';
import { RedisService } from \'./redis.service\';
import * as redisStore from \'cache-manager-redis-store\';
import { envVariables } from \'../env.variables\';

@Module({
  imports: [
    CacheModule.registerAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => ({
        store: redisStore,
        host: process.env.REDIS_HOST,
        port: configService.get(\'REDIS_PORT\'),
        ttl: configService.get(\'CACHE_TTL\'),
        max: configService.get(\'MAX_ITEM_IN_CACHE\'),
      }),
    }),
  ],
  providers: [RedisService],
  exports: [RedisService],
})
export class RedisModule {}

.env

#REDIS
REDIS_HOST=redis

码头工人-compose.yml

version: \"3.8\"

services:
  partnersusers:
    image: partnersusers
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      - RUN_ENV=dev
      - NODE_ENV=development
    ports:
      - \"4000:4000\"
    networks:
      - default
  redis:
    image: \'redis:alpine\'
    ports:
     - \"6379:4000\"
networks:
  default:
    driver: bridge

Docker 中的错误:

  • 可能是网桥的错?
  • 我真的不知道
  • 也许,出于某种原因,redis.module.ts 中的process.env.REDIS_HOST 未定义。你检查过这个吗?
  • 该值不是未定义的(我的问题中步骤下的第二个要点)。
  • @GThree 你找到答案了吗?我有完全相同的问题

标签: docker-compose redis nestjs


【解决方案1】:

我不是专家,但我注意到您的 docker-compose.yml 文件中有几件事。

首先,您的 redis 服务缺少网络分配:

networks:
    - default

没有这个,redis-commander 将无法找到它,因为它不在同一个网络上。

第二个 redis 默认在端口:6379 上运行,如果您希望它在端口 4000 上运行,我相信您需要为它指定一个环境变量。 或者在这里,您可能只是混淆了端口匹配的顺序,应该是:4000:6379 (host_port:container_port)。

这是我的工作docker-compose.yml 供参考:

---
version: '3.8'
services:
    ...
    redis:
        image: redis
        container_name: redis
        hostname: redis
        environment:
            - ALLOW_EMPTY_PASSWORD=yes
        ports:
            - '6379:6379'
        networks:
            - my-net

    redis-commander:
        depends_on:
            - redis
        container_name: redis-commander
        hostname: redis-commander
        image: rediscommander/redis-commander:latest
        restart: always
        environment:
            - REDIS_HOSTS=local:redis:6379 # note: this has to be the port the redis container exposes.
        ports:
            - "8081:8081"
        networks:
            - my-net

networks:
    my-net:

希望这可以帮助 :)

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2017-10-16
    • 1970-01-01
    • 2018-03-03
    • 2014-10-20
    • 2018-05-24
    • 2016-04-20
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多