2
respostas

não consigo conectar o nestjs no redis.

Tenho o seguinte conteiner rodando

  redis:
    container_name: redis-cache
    image: redis:7.0-alpine
    ports:
      - 6979:6379
    volumes:
      - redis:/data
    networks:
      - redis
      
networks:
  postgres:
    driver: bridge
  redis:
    driver: bridge

ao usar o redisinsight consigo conectar normalmente usando o host: redis e port: 6379

mas com seguintes configurações em app.module:

    CacheModule.registerAsync({
      useFactory: async () => ({
        store: await redisStore({ ttl: 3600 * 1000, socket:{host: 'redis', port: 6379}}),
      }),
      isGlobal: true,
    }),

o seguinte erro é retornado no terminal

[Nest] 374963  -  ERROR [ExceptionHandler] getaddrinfo EAI_AGAIN redis
Error: getaddrinfo EAI_AGAIN redis
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:108:26)

com a configuração:

    CacheModule.registerAsync({
      useFactory: async () => ({
        store: await redisStore({ ttl: 3600 * 1000 }),
      }),
      isGlobal: true,
    }),

recebo esse erro:

[Nest] 377343  -   ERROR [ExceptionHandler] connect ECONNREFUSED 127.0.0.1:6379
Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16)
2 respostas

Oii, David! Tudo bem?

O erro primeiro erro indica que o Nest.js não está conseguindo resolver o host "redis" para o endereço IP correto.

Uma possível solução é garantir que o serviço Redis esteja sendo executado corretamente e que você esteja usando o nome correto do host no seu arquivo de configuração do Nest.js.

Verifique se o serviço Redis está sendo executado corretamente e se você pode se conectar a ele usando o RedisInsight. Revise o nome do host e a porta.

Além disso, veja se está importando biblioteca correta para se conectar ao Redis no Nest.js. Certifique-se de que você instalou certinho biblioteca, cache-manager-redis-yet e a importou corretamente no seu arquivo de configuração.

Outra coisa que você pode tentar é em vez de usar "redis" como host, tente usar o endereço IP do serviço Redis. Para descobrir o endereço IP do serviço Redis execute o comando docker inspect redis-cache no terminal.

Quanto ao segundo erro, ele indica que o aplicativo está tentando se conectar ao Redis localmente (127.0.0.1) no lugar do contêiner Redis. Então, verifique se o código não está definindo o host como "localhpst" ou " 127.0.0.1" em outra parte do código.

Espero que dê certo ao reparar esses pontos. Qualquer dúvida, compartilhe no fórum.

Bons estudos, David!

Olá NATHALIA QUEIROZ, muito obrigado pela dica. Estava tentando conectar o redis em localhost mas o certo é redis://ip-do-container:porta. Mas acredito que assim não é a melhor forma de conectar com o container, pq se ele for removido e criar outro ele pode responder em outro ip.