Desenvolvedores
Um contêiner não consegue acessar localhost no Mac
Cada contêiner tem sua própria pilha de rede. Em um contêiner, localhost é o próprio contêiner, não o Mac.
Sintomas
- Um app em um contêiner recebe “connection refused” em
localhost:5432ou em uma porta semelhante. - A mesma URL funciona no Safari ou no Terminal do Mac.
- Um servidor de modelos ou API no Mac não pode ser acessado por um contêiner de desenvolvimento.
Possíveis causas
- localhost aponta para o contêiner. O contêiner procura o serviço na própria pilha de rede, onde não há nada aguardando conexões.
- O endereço do host muda. A documentação do Docker informa que o IP do host muda e fornece um nome especial para o host.
- Um firewall no Mac. O firewall do macOS ou outro app de firewall pode bloquear conexões recebidas pelo serviço.
Como verificar
Verifique se o serviço funciona no Mac. Substitua 8000 pela sua porta.
curl http://localhost:8000Veja em qual endereço o serviço do Mac aguarda conexões.
lsof -nP -iTCP:8000 -sTCP:LISTENSaída
*:8000indica todos os endereços.127.0.0.1:8000indica apenas o endereço de loopback.Teste o nome do host dentro do contêiner, se a imagem incluir wget.
docker exec my-container wget -qO- http://host.docker.internal:8000
Como corrigir
No contêiner, use
host.docker.internalem vez delocalhost. Docker Desktop e OrbStack aceitam esse nome.Defina o endereço na configuração do app, por exemplo em uma variável de ambiente.
docker run -e API_URL=http://host.docker.internal:8000 my-imageCom o OrbStack, você também pode usar a rede do host. Assim, os serviços do Mac ficam em
localhostno contêiner.docker run --net host my-imageSe a conexão ainda falhar, confira os ajustes do firewall do macOS. Consulte O firewall do macOS bloqueia conexões recebidas.
Com o Kilobat
As verificações do Kilobat são executadas no Mac, não no contêiner. Adicione
--context containerpara obter um comando a executar no contêiner.kilobat why http://localhost:8000 --context containerSe um serviço hospedado chamar seu Mac, use
--context provider. O Kilobat informará que localhost é privado e está fora do seu alcance.kilobat why http://localhost:8000 --context provider
Perguntas
O host.docker.internal funciona no Linux também?
Esta página trata do Mac. No Docker Desktop para Mac e no OrbStack, o nome resolve para o host.
Por que o Safari acessa o serviço quando o contêiner não consegue?
O Safari é executado no Mac, então localhost é o Mac. O contêiner tem seu próprio localhost.
Fontes
- Documentação do Docker: Explore instruções de rede no Docker Desktop
- Documentação do OrbStack: Rede de contêineres
- OrbStack Docs: Host networking
- lsof(8), página de manual instalada com o macOS 27.2
Verificado em 29 de outubro de 2026.