O erro “php_network_getaddresses: getaddrinfo for redis failed: Temporary failure in name resolution” é um problema comum ao usar Redis com Docker, especialmente em ambientes como o Laradock. Ele indica que o PHP não consegue resolver o nome do host do Redis, ou seja, não consegue encontrar o servidor Redis na rede. Este artigo descreverá as causas comuns e as soluções passo a passo para resolver esse problema.
Causas Comuns:
- Nome do host incorreto: O nome do serviço Redis configurado na sua aplicação não corresponde ao nome do container Redis na sua rede Docker.
- Problemas de DNS dentro do Docker: O container PHP não consegue resolver nomes de host dentro da rede Docker.
- Container Redis não está em execução: O serviço Redis pode não estar em execução ou não ter sido iniciado corretamente.
- Problemas de rede do Docker: Configurações incorretas de rede no Docker podem impedir a comunicação entre os containers.
- Arquivo de dump do Redis corrompido (dump.rdb): Um arquivo de persistência do Redis corrompido pode impedir a inicialização do servidor.
Soluções Passo a Passo:
Verifique os logs do container Redis:
Esta é geralmente a primeira etapa de diagnóstico, pois os logs fornecem informações sobre a causa de uma falha.
No Laradock:
docker-compose logs redisEm outras configurações Docker:
docker logs <nome_do_container_redis>
Procure por erros como:
Can't open the log fileBad file format reading the append only fileFailed opening the RDB file
Se você encontrar mensagens relacionadas a “RDB file” ou “AOF file” corrompidos, a solução 2 abaixo pode resolver o problema.
Exclua o arquivo de dump do Redis (dump.rdb) se estiver corrompido:
Se os logs indicarem um problema com o arquivo
dump.rdb(arquivo de persistência do Redis), excluí-lo pode resolver o problema. Atenção: Isso resultará na perda de dados persistidos no Redis. Se a persistência for crucial, tente outras soluções primeiro ou faça um backup do arquivo antes de excluí-lo.No Laradock:
docker-compose exec redis bash rm /data/dump.rdb exit docker-compose restart redisOu, se você tem um volume mapeado:
Localize o volume mapeado para
/datado container redis no seudocker-compose.yml. No host, remova o arquivodump.rdbdentro desse diretório. Em seguida, reinicie o container redis.Em outras configurações Docker:
Localize o diretório onde o Redis armazena os dados (geralmente configurado em
redis.confou nodocker-compose.ymlusando volumes). Remova o arquivodump.rdbdesse diretório e reinicie o container Redis.
Verifique o nome do host do Redis:
No Laradock: O nome padrão do serviço Redis no Laradock é
redis. Certifique-se de que sua configuração de conexão Redis (geralmente em.envouconfig/database.phpno Laravel) esteja usando este nome. Exemplo:REDIS_HOST=redis REDIS_PORT=6379Em outras configurações Docker: Se você não estiver usando o Laradock, verifique o nome do serviço definido no seu arquivo
docker-compose.yml.
Reinicie os containers Docker:
Uma simples reinicialização pode resolver problemas temporários de resolução de nomes. No Laradock, execute:
docker-compose down docker-compose up -d redis workspace nginxCertifique-se de iniciar o
redis, oworkspace(que contém o PHP) e onginx(se estiver usando).Verifique a resolução de nomes dentro do container PHP:
Acesse o container
workspacedo Laradock:docker-compose exec workspace bashDentro do container, tente executar o comando
ping redis:ping redis- Se o ping falhar, isso indica um problema de resolução de nomes dentro do container. Continue para o próximo passo.
- Se o ping funcionar, o problema pode estar em outro lugar, como na configuração da sua aplicação.
Reconstrua a rede Docker (em casos mais complexos):
Em alguns casos, a rede Docker pode ficar em um estado inconsistente. Tente reconstruí-la:
docker-compose down docker network prune docker-compose up -d redis workspace nginxO comando
docker network pruneremove redes não utilizadas, o que pode ajudar a resolver problemas de configuração.Verifique a configuração do
docker-compose.yml(para configurações personalizadas):Se você não estiver usando o Laradock e tiver uma configuração personalizada do
docker-compose.yml, certifique-se de que os containers estejam na mesma rede. Veja um exemplo:version: "3.7" services: web: image: nginx:alpine ports: - "80:80" networks: - my-network redis: image: redis:alpine networks: - my-network networks: my-network: driver: bridgeNeste exemplo, ambos os serviços (
weberedis) estão na mesma rede chamadamy-network.Verifique o arquivo hosts do container (menos comum):
Em casos raros, o arquivo
/etc/hostsdentro do container PHP pode estar incorreto. Você pode verificar e, se necessário, adicionar uma entrada manualmente. No entanto, as soluções anteriores geralmente resolvem o problema antes que isso seja necessário.
Exemplo de solução no Laradock (resumo):
docker-compose logs redis(Verificar logs)- (Se necessário, com base nos logs):
docker-compose exec redis bash rm /data/dump.rdb exit docker-compose restart redis - Verifique
.env:REDIS_HOST=redis docker-compose downdocker-compose up -d redis workspace nginx
Seguindo esses passos, você deverá conseguir resolver o erro “php_network_getaddresses: getaddrinfo for redis failed: Temporary failure in name resolution” e conectar sua aplicação ao Redis corretamente dentro do seu ambiente Docker. Se o problema persistir, forneça mais detalhes sobre sua configuração para que possamos ajudar melhor.


Comentários