16 min de leitura · Guia técnico
Conexão recusada no Traefik nas portas 80 e 443 ocorre quando o proxy reverso não está mapeando corretamente os entrypoints no docker-compose.yml, quando outro processo já ocupa essas portas, ou quando as regras de roteamento dos containers de backend estão ausentes ou incorretas. Verifique os entrypoints, libere as portas e corrija as labels dos containers para restaurar o tráfego.
Pré-requisitos para configurar o Traefik como proxy reverso
- Acesso root ou sudo ao servidor Linux (Ubuntu 24.04 LTS, Debian 12 ou Rocky Linux 9)
- Docker Engine instalado (versão 24 ou superior) e Docker Compose v2
- Traefik v2.x ou v3.x instalado via imagem oficial
traefik:v2.11 - Portas 80 e 443 disponíveis no host (sem Apache, Nginx ou outro serviço ocupando-as)
- Domínio apontando para o IP do servidor (necessário para emissão de certificado Let's Encrypt)
- Acesso SSH ao servidor — veja como acessar servidores VPS Linux da AviraHost
Conexão recusada no Traefik porta 80/443: diagnóstico inicial
Antes de qualquer alteração, identifique exatamente o que está bloqueando o tráfego. O erro connection refused no Traefik pode ter três origens distintas: porta ocupada por outro processo, entrypoint não declarado no arquivo de configuração, ou container Traefik que simplesmente não subiu. Execute os comandos abaixo na ordem para isolar a causa.
Verifique quais processos estão escutando nas portas 80 e 443:
ss -tlnp | grep -E ":80|:443"
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1234,fd=7))
Se a saída mostrar nginx, apache2 ou qualquer outro processo que não seja o Docker, esse serviço está impedindo o Traefik de se ligar às portas. Pare o serviço conflitante antes de iniciar o Traefik:
sudo systemctl stop nginx
sudo systemctl disable nginx
Em seguida, confirme se o container do Traefik está em execução:
docker ps --filter "name=traefik"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 traefik:v2.11 "/entrypoint.sh trae…" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp traefik
Se o container não aparecer ou o status for Exited, verifique os logs para identificar o erro de inicialização:
docker logs traefik --tail 50
Configurar entrypoints corretos no docker-compose.yml do Traefik
O motivo mais frequente de porta 80 recusada no Traefik é a ausência ou erro na declaração dos entrypoints. O Traefik precisa que as portas sejam mapeadas tanto na seção ports do Compose quanto nos argumentos de comando (ou no arquivo traefik.yml). Veja um exemplo funcional completo:
version: "3.8"
services:
traefik:
image: traefik:v2.11
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
networks:
- proxy
networks:
proxy:
external: true
Pontos críticos nesta configuração:
- --entrypoints.web.address=:80 — define o entrypoint HTTP na porta 80
- --entrypoints.websecure.address=:443 — define o entrypoint HTTPS na porta 443
- ports: "80:80" e "443:443" — mapeia as portas do host para o container
- providers.docker.exposedbydefault=false — exige label explícita em cada container
- networks: proxy (external: true) — a rede deve existir antes de subir o Compose
Crie a rede Docker antes de iniciar os serviços, caso ainda não exista:
docker network create proxy
Suba o Traefik e verifique se as portas foram abertas corretamente:
docker compose up -d traefik
ss -tlnp | grep -E ":80|:443"
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("docker-proxy",pid=5678,fd=4))
tcp LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("docker-proxy",pid=5679,fd=4))
Configurar labels nos containers de backend para roteamento correto
Mesmo com o Traefik escutando nas portas corretas, o roteamento de containers Docker falha se as labels estiverem ausentes ou com erros de sintaxe. Cada container de backend precisa declarar explicitamente as regras de roteamento. Veja um exemplo com uma aplicação Node.js:
services:
minha-app:
image: node:20-alpine
container_name: minha-app
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.minha-app.rule=Host(`meudominio.com.br`)"
- "traefik.http.routers.minha-app.entrypoints=websecure"
- "traefik.http.routers.minha-app.tls.certresolver=letsencrypt"
- "traefik.http.services.minha-app.loadbalancer.server.port=3000"
- "traefik.http.routers.minha-app-http.rule=Host(`meudominio.com.br`)"
- "traefik.http.routers.minha-app-http.entrypoints=web"
- "traefik.http.routers.minha-app-http.middlewares=redirect-https"
- "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-https.redirectscheme.permanent=true"
networks:
- proxy
networks:
proxy:
external: true
Labels obrigatórias e o que cada uma faz:
- traefik.enable=true — ativa o Traefik para este container (obrigatório quando
exposedbydefault=false) - traefik.http.routers.[nome].rule — define a regra de roteamento (domínio, path, etc.)
- traefik.http.routers.[nome].entrypoints — vincula o router ao entrypoint correto
- traefik.http.services.[nome].loadbalancer.server.port — porta interna do container
- traefik.http.middlewares.redirect-https — redireciona HTTP para HTTPS automaticamente
Após aplicar as labels, reinicie o container e verifique se o Traefik detectou o novo router:
docker compose up -d minha-app
docker logs traefik --tail 20 | grep "minha-app"
Forçar HTTPS e redirecionar HTTP para HTTPS no Traefik v2
O redirecionamento HTTP para HTTPS no Traefik é feito via middleware redirectscheme. Diferente do Nginx, onde você edita blocos de servidor, no Traefik toda a lógica fica nas labels do container ou em arquivos de configuração dinâmica. O exemplo acima já inclui o middleware de redirecionamento. Para aplicá-lo globalmente a todos os containers, adicione ao arquivo estático traefik.yml:
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /letsencrypt/acme.json
tlsChallenge: {}
providers:
docker:
exposedByDefault: false
api:
insecure: false
Com esta configuração no arquivo estático, qualquer requisição HTTP na porta 80 é automaticamente redirecionada para HTTPS sem precisar declarar o middleware em cada container individualmente. Para saber mais sobre como redirecionar HTTP para HTTPS, consulte também como redirecionar um site HTTP para HTTPS.
Reinicie o Traefik para aplicar as alterações no arquivo estático:
docker compose restart traefik
Verificar firewall e regras de iptables que bloqueiam as portas
Mesmo com o Traefik configurado corretamente, o firewall do servidor pode estar bloqueando as conexões externas nas portas 80 e 443. No Ubuntu 24.04 com UFW ativo, verifique e libere as portas:
sudo ufw status verbose
Status: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp DENY IN Anywhere
443/tcp DENY IN Anywhere
Se as portas estiverem bloqueadas, libere-as:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
No Rocky Linux 9 ou AlmaLinux 9 com firewalld:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
cockpit dhcpv6-client http https ssh
Verifique também se há regras de iptables inseridas diretamente que possam estar bloqueando o tráfego Docker:
sudo iptables -L DOCKER-USER -n -v
Atenção: Nunca execute iptables -F em produção sem entender todas as regras ativas, pois isso pode remover proteções críticas e expor o servidor.
Problemas comuns e como resolver
Sintoma: Traefik inicia mas porta 80 continua recusando conexão
Causa: O container Traefik subiu, mas a seção ports do docker-compose.yml não foi declarada ou está com sintaxe incorreta (por exemplo, usando aspas simples em vez de duplas, ou omitindo o mapeamento host:container).
Solução: Confirme que o arquivo Compose contém exatamente - "80:80" e - "443:443" na seção ports do serviço Traefik. Após corrigir, execute docker compose down && docker compose up -d para recriar o container com o mapeamento correto.
Sintoma: Container de backend não recebe tráfego mesmo com Traefik ativo
Causa: O container de backend está em uma rede Docker diferente da rede onde o Traefik opera. O Traefik só consegue rotear tráfego para containers que compartilham a mesma rede Docker.
Solução: Adicione a rede proxy (ou o nome da rede do Traefik) ao container de backend no Compose e confirme que a rede está declarada como external: true. Execute docker network inspect proxy para listar os containers conectados e verificar se o backend aparece na lista.
Sintoma: Certificado Let's Encrypt não é emitido e HTTPS falha
Causa: O arquivo acme.json não existe ou tem permissões incorretas. O Traefik exige que este arquivo tenha permissão 600 para armazenar os certificados com segurança.
Solução: Crie o arquivo e ajuste as permissões antes de iniciar o Traefik:
touch ./letsencrypt/acme.json
chmod 600 ./letsencrypt/acme.json
Após isso, reinicie o Traefik e monitore os logs para confirmar a emissão do certificado: docker logs traefik -f | grep -i "acme\|certificate".
Sintoma: Dashboard do Traefik na porta 8080 não abre
Causa: O dashboard não foi habilitado nos argumentos de comando, ou a porta 8080 não foi mapeada no Compose, ou --api.insecure=false está ativo sem um router configurado para expor o dashboard via HTTPS.
Solução: Para acesso local seguro via túnel SSH, não mapeie a porta 8080 publicamente. Adicione --api.dashboard=true e --api.insecure=true apenas em ambiente de desenvolvimento, e acesse via ssh -L 8080:localhost:8080 usuario@servidor seguido de http://localhost:8080 no navegador local.
Sintoma: Erro "bind: address already in use" ao iniciar o Traefik
Causa: Outro processo (Apache, Nginx, ou uma instância anterior do Traefik) ainda está ocupando a porta 80 ou 443 no host.
Solução: Identifique o processo com ss -tlnp | grep -E ":80|:443", pare o serviço conflitante com sudo systemctl stop [servico] e, se necessário, desative-o com sudo systemctl disable [servico]. Depois, suba o Traefik novamente.
Perguntas frequentes sobre Traefik porta 80 e 443
Por que o Traefik recusa conexão na porta 80 mesmo com o container rodando?
O Traefik pode estar rodando, mas sem o entrypoint correto mapeado no docker-compose.yml. Verifique se as portas 80 e 443 estão declaradas na seção ports do serviço Traefik e se o entrypoint web aponta para :80. Outro motivo comum é outro processo (como Apache ou Nginx) ocupando a porta antes do Traefik iniciar — use ss -tlnp | grep :80 para confirmar qual processo está vinculado à porta.
Como verificar se o Traefik está realmente escutando nas portas 80 e 443?
Execute ss -tlnp | grep -E "80|443" no host para listar processos escutando nessas portas. Se o Traefik estiver ativo, você verá o PID do processo Docker associado (geralmente identificado como docker-proxy). Também é possível acessar o dashboard do Traefik na porta 8080 (se habilitado) para confirmar os entrypoints ativos e os routers registrados.
O Traefik sobe mas os containers de backend não recebem tráfego — o que verificar?
Confirme que os containers de backend estão na mesma rede Docker que o Traefik (geralmente uma rede do tipo bridge declarada como externa). Verifique também se as labels do container estão corretas: traefik.enable=true, o router com a regra de Host e o service apontando para a porta interna correta. Use docker network inspect proxy para listar todos os containers conectados à rede do Traefik.
Como forçar HTTPS e redirecionar HTTP para HTTPS no Traefik v2?
No Traefik v2, crie um middleware de redirecionamento com a label traefik.http.middlewares.redirect-https.redirectscheme.scheme=https e aplique-o ao router HTTP do container. O router HTTPS deve usar o resolver de certificado Let's Encrypt configurado no arquivo estático do Traefik (traefik.yml ou flags de comando). Alternativamente, configure o redirecionamento global diretamente no entrypoint web no arquivo estático para aplicar a todos os containers automaticamente.
É seguro expor o dashboard do Traefik na porta 8080 em produção?
Não é recomendado expor o dashboard sem autenticação em produção. O ideal é habilitar o dashboard apenas em localhost (--api.insecure=false) e acessá-lo via túnel SSH, ou protegê-lo com middleware de autenticação básica (basicAuth) e restringir o acesso por IP usando o middleware IPWhiteList do Traefik. Expor o dashboard publicamente sem proteção revela informações sobre todos os serviços roteados.
Conclusão
- Diagnostique primeiro: use
ss -tlnp | grep -E ":80|:443"edocker logs traefikpara identificar se o problema é porta ocupada, entrypoint ausente ou container parado antes de fazer qualquer alteração. - Valide a configuração completa: entrypoints no arquivo estático, mapeamento de portas no Compose, rede Docker compartilhada e labels corretas nos containers de backend são os quatro pilares de um Traefik funcional.
- Proteja o ambiente de produção: desative o dashboard público, use
acme.jsoncom permissão 600, configure redirecionamento HTTPS global e restrinja o acesso ao socket Docker com:rono volume.
Leia também
- Solucionar erro de Traefik ao rotear containers Docker no Debian 12
- Tutorial: mover Traefik para novo servidor sem perder rotas
- Guia: conexão recusada na porta 3306 do MySQL — causa e correção
Precisa de ajuda com Traefik e containers Docker no seu servidor?
Configurar proxy reverso com Traefik exige um ambiente Linux estável, com recursos suficientes para rodar múltiplos containers simultaneamente. Um VPS com suporte a Docker e rede configurável é o ponto de partida ideal para esse tipo de infraestrutura.
Conheça os planos de VPS da AviraHost e comece sua infraestrutura com Docker hoje