evolution-api icon indicating copy to clipboard operation
evolution-api copied to clipboard

Falha Crítica e Persistente: [Redis] redis disconnected mesmo com o Redis "Healthy" (v2.3.6)

Open amacfe-ui opened this issue 1 month ago • 12 comments

Bem-vido!

  • [x] Sim, pesquisei problemas semelhantes no GitHub e não encontrei nenhum.

O que você fez?

"Olá, estou criando esta nova issue detalhada porque o meu problema anterior (se você tiver o número dele, coloque aqui) foi fechado com a sugestão de 'usar a versão nova', mas o problema persiste.

Eu passei os últimos dois dias com um especialista em Docker depurando este problema. Nós tentamos todas as configurações possíveis (troca de versão do Redis, com/sem senha, com/sem volume, troca de imagem da API) e o erro redis disconnected é persistente e não faz sentido lógico.

Por favor, leiam o relatório técnico detalhado abaixo. Precisamos de ajuda, pois isso parece ser um bug na imagem evoapicloud/evolution-api:latest."

O que você esperava?

Eu esperava que o container evolution_api_mm conseguisse se conectar ao container redis_db_mm (o redis_evo).

O que era esperado era que, como o container do Redis (redis_db_mm) está no ar e com o status "Healthy" (como visto no docker ps), a API da Evolution simplesmente se conectasse a ele e ficasse operacional.

O comportamento esperado era NÃO ver o erro [Redis] redis disconnected.

O que vc observou ao invés do que esperava?

O que realmente acontece é um erro crítico e imediato:

O container evolution_api_mm inicia.

Ele consegue se conectar ao banco de dados postgres_db_mm (o Postgres do Evolution), pois os logs chegam a mostrar a leitura da instância (ex: INFO [ChannelStartupService]).

Imediatamente depois, ele tenta se conectar ao redis_db_mm (o Redis do Evolution) e falha.

O container evolution_api_mm entra em um loop infinito, exibindo a seguinte mensagem de erro nos logs sem parar:

[Evolution API] v2.3.6 171 - Sat Nov 01 2025 12:49:40 ERROR [Redis] [string] redis disconnected Este erro ocorre independentemente da versão do Redis (6 ou 7), com ou sem senha, ou com ou sem volume. O container redis_db_mm está sempre com o status "Healthy" no docker ps, mas a API não consegue se conectar a ele.

O Relatório Técnico completo (que colei no campo "O que você fez?") detalha todas as 9 (nove) combinações de depuração que falharam.

Capturas de Tela/Vídeos

Image Image

Qual versão da API você está usando?

[Evolution API] v2.3.6 ...

Qual é o seu ambiente?

Linux

Outras expecificações do ambiente

Ambiente de Servidor (Não é Windows):

Provedor: VPS OCI (Oracle Cloud) - 4GB RAM

Sistema Operacional: Linux

Ambiente: Docker e Docker-Compose

Stack: Instalação completa com 8 containers: N8N, Traefik, Postgres (x2), e Redis (x2), todos rodando na mesma rede bridge do Docker.

Se aplicável, cole a saída do log

O log entra em um loop infinito e repete a seguinte mensagem de erro:

[Evolution API] v2.3.6 171 - Sat Nov 01 2025 12:49:40 ERROR [Redis] [string] redis disconnected [Evolution API] v2.3.6 171 - Sat Nov 01 2025 12:49:40 ERROR [Redis] [string] redis disconnected [Evolution API] v2.3.6 171 - Sat Nov 01 2025 12:49:41 ERROR [Redis] [string] redis disconnected [Evolution API] v2.3.6 171 - Sat Nov 01 2025 12:49:41 ERROR [Redis] [string] redis disconnected

Isso acontece mesmo enquanto o container do Redis (redis_db_mm) está com o status "Healthy" no docker ps.

Notas Adicionais

Perfeito. Este campo "Notas Adicionais" é onde podemos colocar o nosso Relatório Técnico completo.

Por favor, copie e cole aqui o texto daquele relatório que eu preparei para você. Ele contém toda a informação que os desenvolvedores precisam saber sobre as 9 (nove) tentativas de depuração que falharam.

Vou colar o relatório aqui novamente para você copiar:

(Copie e cole tudo abaixo desta linha) 📝 Relatório Técnico: Falha Crítica de Conexão entre a Evolution API e o Redis em Ambiente Docker Problema: O container da evolution_api falha consistentemente em se conectar ao seu container redis_evo, mesmo ambos estando na mesma rede Docker e o container do Redis se reportando como "Healthy".

  1. O Paradoxo do Problema O problema é exclusivamente entre evolution_api e redis_evo:

O container evolution_api consegue se conectar ao seu container de banco de dados (postgres_db_mm). Os logs mostram que ele lê os dados da instância.

O container redis_db_mm (o redis_evo) sempre se reporta como "Healthy" no docker ps, indicando que passou no teste de healthcheck (redis-cli ping).

No entanto, os logs do container evolution_api entram em um loop infinito de erros [ERROR] [Redis] [string] redis disconnected.

Isso prova que a conectividade de rede funciona (já que o Postgres conecta), mas a conexão do aplicativo ao Redis falha.

  1. Todas as Tentativas de Solução (Que Falharam) Para isolar o problema, realizamos uma série exaustiva de testes de configuração. O erro redis disconnected persistiu em todos os cenários:

Troca da Imagem da API:

Tentativa 1: atendai/evolution-api:latest (imagem antiga).

Tentativa 2: evoapicloud/evolution-api:latest (v2.3.6) (imagem nova e oficial).

Resultado: Ambas falham.

Troca da Imagem do Redis:

Tentativa 1: redis:6-alpine (versão antiga).

Tentativa 2: redis:7-alpine (versão nova).

Resultado: Ambas falham.

Configuração de Autenticação do Redis:

Tentativa 1 (Sem Senha): O redis_evo rodou sem senha. A evolution_api foi configurada sem senha.

Tentativa 2 (Com Senha): O redis_evo foi configurado com requirepass e uma senha. O healthcheck foi atualizado (redis-cli -a ping) e passou (status "Healthy"). A evolution_api foi configurada com a REDIS_PASSWORD correta.

Resultado: Ambas falham.

Resolução de Nomes (Host do Redis):

Tentativa 1: REDIS_HOST=redis_evo (usando o nome do serviço Docker).

Tentativa 2: REDIS_HOST=redis_db_mm (usando o container_name).

Resultado: Ambas falham.

Gerenciamento de Volume do Redis:

Tentativa 1: Com um volume persistente (redis_data_evo:/data).

Tentativa 2: Destruindo o volume (docker volume rm ...) e recriando do zero.

Tentativa 3: Removendo totalmente o volume do docker-compose.yml (para rodar em memória).

Resultado: Todas falham.

Configurações de Comando do Redis:

Foram testadas várias combinações de comandos no redis_evo, incluindo --bind 0.0.0.0 e --protected-mode no.

Resultado: Todas falham.

  1. Conclusão O problema é independente da versão do Redis, da presença de senha ou da persistência de volume. O container redis_db_mm está comprovadamente "saudável", mas a imagem evoapicloud/evolution-api:v2.3.6 é incapaz de se conectar a ele. Isso sugere fortemente um bug de implementação do cliente Redis dentro da própria imagem da API.

amacfe-ui avatar Nov 01 '25 16:11 amacfe-ui

Olá, pessoal.

Atualizando o chamado #2175 com provas definitivas.

Para eliminar minha infraestrutura como a causa do problema, eu deletei tudo e fiz uma instalação 100% "do zero" na minha VPS.

Stack Atual: VPS Limpa (Hostgator)

Docker Compose: Arquivo 100% limpo, criado do zero.

Imagem da API: evoapicloud/evolution-api:latest (v2.3.6, a oficial mais recente)

Imagem do Redis: redis:7-alpine

O Resultado A instalação foi um sucesso. O N8N e o Traefik funcionam 100%.

O erro ERROR [Redis] redis disconnected (visto nos logs da evolution_api_mm) ainda acontece imediatamente após a API iniciar.

A Prova Final Eu provei que o servidor Redis está 100% saudável e acessível. Eu executei um PING diretamente no container do Redis enquanto a API estava no ar:

Bash

[root@vps ~]# docker exec -it redis_evo redis-cli PING PONG Conclusão A instalação está limpa. O servidor Redis (redis_evo) está no ar e respondendo PONG. Mesmo assim, a API (evolution_api_mm, v2.3.6), que está na mesma rede Docker, não consegue se conectar e reporta redis disconnected.

Isso prova que o bug não está no Docker, na VPS ou no Redis, mas sim dentro do código da API que está falhando em se conectar a um servidor Redis perfeitamente saudável.

Obrigado!

amacfe-ui avatar Nov 08 '25 14:11 amacfe-ui

Mesmo problema aqui, e eu utilizei a imagem evoapicloud/evolution-api:v2.3.6

version: "3"
services:
  postgresql:
    container_name: postgresql-evo
    image: postgres:14.19-trixie
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=evolution
      - POSTGRES_PASSWORD=vO35S2VzjxxL0sE0LEbh84
      - POSTGRES_DB=evolution_db
  redis:
    container_name: redis-evo
    image: redis:8.4-rc1-alpine3.22
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"]
  evolution-api:
    container_name: evolution_api
    image: evoapicloud/evolution-api:v2.3.6
    restart: always
    ports:
      - "8080:8080"
    env_file:
      - .env
    volumes:
      - evolution_store:/evolution/store
      - evolution_instances:/evolution/instances
    depends_on:
      - postgresql
      - redis

volumes:
  evolution_store:
  evolution_instances:
  redis_data:
Image

GusMartins499 avatar Nov 10 '25 18:11 GusMartins499

Seu docker compose não tem network, precisa criar uma network com Driver: bridge

e todos os serviços (evoapi, postgres, redid) vc deve atribuir a mesma network com:

networks: - evo_network

E usar a URL correta do redis no.env

Quando colocar a evo e redis na mesma network, pra url do redis pode usar o container name ou service name como HOST, deste modo

redis://redis_db_mm:6379/... (irá conectar)

redis://redis:6379/...

(pode testar mas creio que este não vá funcionar pois seu container chama redis_db_mm)

gkp1 avatar Nov 10 '25 19:11 gkp1

Seu docker compose não tem network, precisa criar uma network com Driver: bridge

e todos os serviços (evoapi, postgres, redid) vc deve atribuir a mesma network com:

networks: - evo_network

E usar a URL correta do redis no.env

Quando colocar a evo e redis na mesma network, pra url do redis pode usar o container name ou service name como HOST, deste modo

redis://redis_db_mm:6379/... (irá conectar)

redis://redis:6379/...

(pode testar mas creio que este não vá funcionar pois seu container chama redis_db_mm)

Vamos ver se eu entendi tudo corretamente, eu alterei meu docker-compose, adicionei as networks e alterei a url do meu redis no arquivo .env e continuo com o mesmo problema da imagem acima, redis diconected

Meu arquivo .env:

AUTHENTICATION_API_KEY=<value>
DATABASE_ENABLED=true
DATABASE_PROVIDER=postgresql
DATABASE_CONNECTION_URI=postgresql://evolution:vO35S2VzjxxL0sE0LEbh84@postgresql:5432/evolution_db
DATABASE_CONNECTION_CLIENT_NAME=evolution
DATABASE_SAVE_DATA_INSTANCE=true
DATABASE_SAVE_DATA_NEW_MESSAGE=true
DATABASE_SAVE_MESSAGE_UPDATE=true
DATABASE_SAVE_DATA_CONTACTS=true
DATABASE_SAVE_DATA_CHATS=true

REDIS_ENABLED=true
REDIS_URI=redis://redis_db_mm:6379
version: "3"
services:
  postgresql:
    container_name: postgresql-evo
    image: postgres:14.19-trixie
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=evolution
      - POSTGRES_PASSWORD=vO35S2VzjxxL0sE0LEbh84
      - POSTGRES_DB=evolution_db
    volumes:
      - postgresql_data:/var/lib/postgresql/data
    networks:
      - evo-network
  redis:
    container_name: redis-evo
    image: redis:7-alpine
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - evo-network
  evolution-api:
    container_name: evolution_api
    image: evoapicloud/evolution-api:v2.3.6
    restart: always
    ports:
      - "8080:8080"
    env_file:
      - .env
    volumes:
      - evolution_store:/evolution/store
      - evolution_instances:/evolution/instances
    depends_on:
      - postgresql
      - redis
    networks:
      - evo-network

networks:
  evo-network:
    name: evo-network
    driver: bridge

volumes:
  postgresql_data:
  evolution_store:
  evolution_instances:
  redis_data:
 $ docker network inspect evo-network
[
    {
        "Name": "evo-network",
        "Id": "148769af1d717f45a7eb08549ff1ad8130d6bbb8f698e45a0ffdcc1021ab79bd",
        "Created": "2025-11-11T11:34:21.748324376Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.23.0.0/16",
                    "Gateway": "172.23.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "440fa32d2369932125f60fc6cfd141bc0aa07e8cd3a95dfda47ce812f57aa37b": {
                "Name": "evolution_api",
                "EndpointID": "f73ab01babd47b8f14b77eb84e1f6b8c2c24127f66c09fec040464eb93848031",
                "MacAddress": "02:42:ac:17:00:04",
                "IPv4Address": "172.23.0.4/16",
                "IPv6Address": ""
            },
            "c53ffa76387a116313a2f33aebf839dcfb41f63dd8411a72d2152b3c3ebd5428": {
                "Name": "redis-evo",
                "EndpointID": "9b66879665aa54f24b3bf1ac89f90384fb982009b6a4c6f81d9bf0549751c2e6",
                "MacAddress": "02:42:ac:17:00:02",
                "IPv4Address": "172.23.0.2/16",
                "IPv6Address": ""
            },
            "cc82b8bf94d13f8bd78c1356bfaaf7c6b529fcd076bfe10bca7acb428199700d": {
                "Name": "postgresql-evo",
                "EndpointID": "b603a920ce1dee187310d0add9532157df716577034c825a376f0c6fb0f1916b",
                "MacAddress": "02:42:ac:17:00:03",
                "IPv4Address": "172.23.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "evo-network",
            "com.docker.compose.project": "evolution-api-poc",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

GusMartins499 avatar Nov 11 '25 11:11 GusMartins499

O host do redis ta errado, nao é redis_db_mm é so redis como você definiu no nome do serviço.

DavidsonGomes avatar Nov 11 '25 11:11 DavidsonGomes

O host do redis ta errado, nao é redis_db_mm é so redis como você definiu no nome do serviço.

Voltei meu .env para REDIS_URI=redis://redis:6379 e tive o mesmo problema

Image Image Image

GusMartins499 avatar Nov 11 '25 12:11 GusMartins499

Seu container name do redis chama redis-evo então usa isso de host ao invés de redis-db-mm

gkp1 avatar Nov 11 '25 14:11 gkp1

Seu container name do redis chama redis-evo então usa isso de host ao invés de redis-db-mm

Alterando a variável REDIS_URI no meu .env para redis://redis-evo:6379 tive o mesmo problema

GusMartins499 avatar Nov 11 '25 15:11 GusMartins499

Aí vc vai ter q ir testando e debugar, já lhe passei a orientação como funciona, é nome de host errado ou credenciais redis talvez, veja logs do container redis, vai mostrar o erro, ou se não chegou nada lá vc sabe que é host errado

gkp1 avatar Nov 11 '25 15:11 gkp1

Aí vc vai ter q ir testando e debugar, já lhe passei a orientação como funciona, é nome de host errado ou credenciais redis talvez, veja logs do container redis, vai mostrar o erro, ou se não chegou nada lá vc sabe que é host errado

Acredito que a falta do network no arquivo docker-compose era parte do problema, assim como o host também era parte do problema, encontrei essa outra issue (https://github.com/EvolutionAPI/evolution-api/issues/1856) onde tem um comentário que diz ter resolvido o problema, basicamente faltava adicionar informações no arquivo .env. Adicionando o que faltava no .env a conexão estabeleceu sem problemas.

AUTHENTICATION_API_KEY=<value>
DATABASE_ENABLED=true
DATABASE_PROVIDER=postgresql
DATABASE_CONNECTION_URI=postgresql://evolution:vO35S2VzjxxL0sE0LEbh84@postgresql:5432/evolution_db
DATABASE_CONNECTION_CLIENT_NAME=evolution
DATABASE_SAVE_DATA_INSTANCE=true
DATABASE_SAVE_DATA_NEW_MESSAGE=true
DATABASE_SAVE_MESSAGE_UPDATE=true
DATABASE_SAVE_DATA_CONTACTS=true
DATABASE_SAVE_DATA_CHATS=true

REDIS_ENABLED=true
CACHE_REDIS_ENABLED=true
CACHE_REDIS_URI=redis://redis:6379
CACHE_REDIS_TTL=604800
REDIS_URI=redis://redis:6379
REDIS_PASSWORD=
Image

GusMartins499 avatar Nov 11 '25 17:11 GusMartins499

Tente trocar de:

CACHE_REDIS_URI=redis://default:SENHA@NOME_INSTANCIA_EVO_NOME_INSTANCIA_REDIS:6379

Para

CACHE_REDIS_URI=redis://default:SENHA@NOME_INSTANCIA_REDIS:6379

Exemplo:

CACHE_REDIS_URI=redis://default:SENHA@evolutionoutside_redisoutsidecorp:6379 Para CACHE_REDIS_URI=redis://default:SENHA@redisoutsidecorp:6379

allan-outside avatar Nov 20 '25 18:11 allan-outside

Confirmação do Bug + Comportamento Adicional Descoberto (v2.3.6)

Confirmo o bug e trago informações adicionais importantes. Testei hoje (27/11/2025) e identifiquei dois comportamentos distintos dependendo da configuração:

🔴 Comportamento 1: Loop Infinito de Erros

Quando: Todas as variáveis Redis configuradas Resultado: Logs de 800KB+ em minutos


[Evolution API] v2.3.6 317 - Thu Nov 27 2025 21:16:17 VERBOSE [CacheEngine] RedisCache initialized for groups
[Evolution API] v2.3.6 317 - Thu Nov 27 2025 21:16:17 ERROR [Redis] redis disconnected
[Evolution API] v2.3.6 317 - Thu Nov 27 2025 21:16:17 ERROR [Redis] redis disconnected
(repete infinitamente...)

🟡 Comportamento 2: Travamento Silencioso

Quando: Variáveis Redis incompletas ou mal configuradas Resultado: Container trava sem logs após node dist/main


> [email protected] start:prod
> node dist/main

(nada mais... processo Node rodando mas sem resposta)

✅ Testes de Conectividade (TODOS Passaram)



# Redis funcionando perfeitamente

docker exec -it redis_container redis-cli PING

# PONG

# Rede Docker OK

docker exec -it evolution_container ping redis

# 64 bytes from 172.18.0.2: ttl=64 time=0.107 ms

# PostgreSQL OK (56 migrações executadas com sucesso)

❌ Tentativas que NÃO Funcionaram

Mesmo com as variáveis sugeridas no comentário #3517967012:


CACHE_REDIS_ENABLED=true
CACHE_REDIS_URI=redis://redis:6379
CACHE_REDIS_PREFIX_KEY=evolution
CACHE_REDIS_TTL=604800

REDIS_ENABLED=true
REDIS_URI=redis://redis:6379
REDIS_PASSWORD=

Resultado: Loop infinito de redis disconnected ou travamento em node dist/main

✅ WORKAROUND DEFINITIVO CONFIRMADO

Desabilitar completamente o Redis:


REDIS_ENABLED=false
CACHE_REDIS_ENABLED=false

Com essa configuração:

  • ✅ API inicia normalmente em segundos
  • ✅ QR Code gerado com sucesso
  • ✅ Webhooks funcionando 100%
  • ✅ Envio/recebimento de mensagens OK
  • ✅ PostgreSQL funcional

📊 Ambiente Testado

  • Imagem: evoapicloud/evolution-api:v2.3.6
  • Redis: redis:7-alpine (testado também com redis:6-alpine)
  • PostgreSQL: postgres:15-alpine
  • Sistema: Ubuntu Linux x86_64
  • Network: Docker bridge customizada

🔍 Análise Técnica

O log mostra claramente:


VERBOSE [CacheEngine] RedisCache initialized
ERROR [Redis] redis disconnected

Isso indica que:

  1. ✅ O módulo CacheEngine detecta o Redis
  2. ✅ A inicialização do cliente é feita
  3. ❌ A conexão real falha imediatamente
  4. 🔁 Tentativas infinitas de reconexão (retry loop)

Suspeita: Bug na implementação do cliente Redis/IORedis dentro do módulo CacheEngine da v2.3.6. Possivelmente:

  • Timeout muito baixo
  • Configuração incorreta de host resolution
  • Falta de tratamento de erro na conexão inicial
  • Problema com autenticação (mesmo sem senha)

💡 Recomendação aos Desenvolvedores

Investigar especificamente:

  1. Módulo CacheEngine e inicialização do Redis
  2. Configuração do cliente IORedis (se usado)
  3. Lógica de retry/reconnection
  4. Por que PostgreSQL conecta mas Redis não (ambos na mesma rede)

📝 Impacto

Crítico: Redis é completamente inutilizável na v2.3.6 em ambiente Docker.

Workaround viável: Desabilitar Redis funciona perfeitamente para deployments single-instance.

TrolljanO avatar Nov 28 '25 01:11 TrolljanO