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 redis
Em outras configurações Docker:
docker logs <nome_do_container_redis>
Procure por erros como:
Can't open the log file
Bad file format reading the append only file
Failed 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 redis
Ou, se você tem um volume mapeado:
Localize o volume mapeado para
/data
do container redis no seudocker-compose.yml
. No host, remova o arquivodump.rdb
dentro 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.conf
ou nodocker-compose.yml
usando volumes). Remova o arquivodump.rdb
desse 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.env
ouconfig/database.php
no Laravel) esteja usando este nome. Exemplo:REDIS_HOST=redis REDIS_PORT=6379
Em 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 nginx
Certifique-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
workspace
do Laradock:docker-compose exec workspace bash
Dentro 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 nginx
O comando
docker network prune
remove 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: bridge
Neste exemplo, ambos os serviços (
web
eredis
) estão na mesma rede chamadamy-network
.Verifique o arquivo hosts do container (menos comum):
Em casos raros, o arquivo
/etc/hosts
dentro 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 down
docker-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