Traefik para roteamento Docker Fedora 42 é o proxy reverso que descobre serviços automaticamente pela API do Docker e pelas labels, sem recarregar um virtual host estático. Para publicar contêineres com TLS, siga estes passos:
- Instale Docker Engine e o plugin Compose no Fedora 42 e libere 80/443 no firewalld.
- Crie a rede Docker compartilhada e o arquivo acme.json com permissão 600.
- Suba o Traefik com provider Docker (socket somente leitura) e entrypoints web/websecure.
- Ative cada app com labels de router, TLS e loadbalancer.server.port.
- Aponte o registro A de seudominio.com.br para o IP do host e teste com curl.
- Confira logs, routers no dashboard interno e status HTTP 200 ou 301/308.
Pré-requisitos para Traefik para roteamento Docker Fedora 42
O roteamento dinâmico só funciona se o host já tiver Docker estável, DNS apontando para o servidor e portas HTTP/HTTPS livres. Sem o socket do daemon e uma rede comum entre proxy e backends, o Traefik sobe mas não alcança os contêineres. Em Fedora 42 o firewalld e o SELinux entram na conta: bloquear 80/443 ou negar o docker.sock gera “connection refused” e rotas vazias. Use um usuário no grupo docker, Compose v2 (docker compose) e um domínio real; o desafio ACME HTTP falha em IP só de documentação.
- Fedora 42 atualizado, acesso root ou sudo e SSH funcional, como em Acessando servidores VPS Linux da AviraHost.
- Docker CE, containerd e docker-compose-plugin instalados; serviço docker habilitado.
- Portas 80 e 443 livres no host (nenhum Nginx/Apache escutando os mesmos entrypoints).
- firewalld ativo; registros A/AAAA do hostname conforme o Guia de zona DNS: registros A, MX, CNAME e TXT do zero.
- E-mail válido para Let’s Encrypt e volume persistente para acme.json.
Instalar Docker e abrir entrypoints no Fedora 42
O proxy reverso Docker precisa do daemon e das portas de entrada antes de qualquer label. No Fedora 42 instale o repositório oficial, suba o serviço e confira com ss, não com netstat. Só o Traefik deve publicar 80 e 443; as aplicações ficam na rede interna. Se outro processo já ocupou essas portas, o container do proxy nem sobe o bind.
Instale o motor e o Compose:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
Ao rodar a verificação, o status deve estar active e a versão do cliente Compose aparecer:
systemctl is-active docker
docker compose version
active
Docker Compose version v2
Libere HTTP e HTTPS no firewalld e recarregue:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
dhcpv6-client http https ssh
Confirme que nada escuta 80/443 ainda:
ss -tlnp | grep -E ':80|:443' || echo "portas livres"
portas livres
Crie o diretório de trabalho, a rede proxy e o arquivo ACME. Sem chmod 600 o resolvedor recusa gravar certificados.
sudo mkdir -p /opt/traefik
sudo install -m 600 /dev/null /opt/traefik/acme.json
docker network create proxy
Network proxy created
Compose, socket Docker e labels de roteamento dinâmico
A descoberta de contêineres acontece quando o Traefik monta /var/run/docker.sock em somente leitura e lê labels traefik.enable, routers e services. ExposedByDefault=false evita publicar stacks esquecidas. A rede nomeada proxy precisa ser a mesma nos serviços; caso contrário o load balancer resolve o nome e o pacote não chega. No Fedora 42, se o SELinux negar o socket, os logs mostram falha ao listar containers — ajuste o rótulo ou a política antes de abrir o socket em escrita.
Grave /opt/traefik/docker-compose.yml com a linha v3 da imagem oficial, entrypoints e HTTP challenge. Troque o e-mail e o Host pelo seu domínio.
services:
traefik:
image: traefik:v3
restart: unless-stopped
command:
- --api.dashboard=true
- --providers.docker=true
- --providers.docker.exposedByDefault=false
- --providers.docker.network=proxy
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --certificatesresolvers.le.acme.httpchallenge=true
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
- [email protected]
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /opt/traefik/acme.json:/letsencrypt/acme.json
networks:
- proxy
whoami:
image: traefik/whoami
restart: unless-stopped
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.whoami.rule=Host(`whoami.seudominio.com.br`)
- traefik.http.routers.whoami.entrypoints=websecure
- traefik.http.routers.whoami.tls.certresolver=le
- traefik.http.services.whoami.loadbalancer.server.port=80
networks:
proxy:
external: true
Traefik para roteamento Docker Fedora 42 com labels HTTP
Cada aplicativo anuncia o Host, o entrypoint TLS e a porta interna. Não publique 80/443 no serviço whoami: o Traefik encaminha pelo nome DNS da rede overlay/bridge. Suba o stack:
cd /opt/traefik
docker compose up -d
docker compose ps
NAME IMAGE STATUS
traefik-traefik-1 traefik:v3 Up
traefik-whoami-1 traefik/whoami Up
O redirecionamento HTTP→HTTPS no entrypoint web cobre o caso descrito em Como redirecionar um site http para https?, sem virtual host extra. Apps novos entram só com labels e networks: proxy; não é preciso editar o YAML do proxy a cada deploy. Proteja o dashboard com middleware basicAuth e Host próprio — nunca deixe a API aberta em 8080 no host de produção. Em um servidor VPS, isole stacks de clientes em redes distintas se houver multi-tenant.
Como testar se o roteamento Traefik está funcionando
A validação de rotas confirma DNS, TLS e o backend ao mesmo tempo. Primeiro o registro A de whoami.seudominio.com.br deve resolver para o IPv4 público (exemplo de documentação 203.0.113.10). Depois curl -I no Host: HTTP 301/308 para HTTPS e, no TLS, 200. Se o certificado for o padrão Traefik ou erro de handshake, o ACME ainda não concluiu — leia o log do container. O dashboard interno lista o router em verde somente quando o serviço está healthy na rede proxy.
curl -I http://whoami.seudominio.com.br
curl -I https://whoami.seudominio.com.br
HTTP/1.1 308 Permanent Redirect
Location: https://whoami.seudominio.com.br/
HTTP/2 200
content-type: text/plain; charset=utf-8
Teste local forçando o Host, útil antes da propagação DNS:
curl -sI -H "Host: whoami.seudominio.com.br" http://127.0.0.1
HTTP/1.1 308 Permanent Redirect
Location: https://whoami.seudominio.com.br/
Logs esperados após o desafio ACME:
docker compose logs traefik --tail 50
Adding certificate for domain whoami.seudominio.com.br
Confira bind no host com ss -tlnp | grep -E ':80|:443': deve aparecer o processo docker-proxy ou traefik. Se curl interno funciona e o acesso externo não, o problema é firewalld, security group ou DNS, não a label. Não exponha porta de aplicação no Compose “para testar”; isso fura o modelo e mascara falha de rede Docker.
Problemas comuns e como resolver
Sintoma: connection refused nas portas 80 e 443
Causa: Traefik não está Up, outro serviço ocupou o bind ou o firewalld não liberou http/https.
Solução: docker compose ps, ss -tlnp e firewall-cmd --list-services. Pare Nginx/Apache no host se estiverem escutando. Recrie o container sem mapear 80/443 em outros serviços.
Sintoma: 404 page not found no Host configurado
Causa: label ausente, traefik.enable=true faltando, rede diferente da providers.docker.network ou porta errada em loadbalancer.server.port.
Solução: o app e o Traefik devem estar em proxy. Ajuste a porta àquela que o processo escuta dentro do container (whoami usa 80). Recrie o serviço após mudar labels: docker compose up -d --force-recreate.
Sintoma: certificado ACME não emite / TLS handshake falha
Causa: DNS ainda não aponta ao host, porta 80 filtrada na borda ou acme.json sem permissão 600.
Solução: valide o A com resolvectl query whoami.seudominio.com.br, abra 80 ponta a ponta e corrija o arquivo. O HTTP challenge exige que o entrypoint web receba /.well-known/acme-challenge sem outro proxy na frente.
Sintoma: Traefik não lista containers (provider Docker vazio)
Causa: socket não montado, permissão ou SELinux negando leitura de /var/run/docker.sock.
Solução: volume :ro, usuário com acesso ao grupo docker no host, e logs do audit. Não monte o socket em modo escrita e não compartilhe o socket com contêineres não confiáveis.
Perguntas frequentes sobre Traefik para roteamento Docker Fedora 42
O que é roteamento dinâmico com Traefik no Docker?
É o Traefik descobrir serviços automaticamente via labels e Docker API, sem recarregar um proxy estático. Cada contêiner anuncia host, porta e TLS; o Traefik atualiza rotas quando o container sobe ou para. Isso reduz arquivos de virtual host e evita reload manual a cada deploy. O modelo depende do provider Docker ativo e de exposedByDefault=false para não publicar stacks sem label.
Como o Traefik encontra os contêineres no Fedora 42?
Com o provider Docker, o Traefik monta o socket /var/run/docker.sock (somente leitura) e lê labels traefik.enable, traefik.http.routers e traefik.http.services. A rede Docker compartilhada precisa existir para o proxy alcançar o backend. No Fedora 42, firewalld e SELinux não substituem essa rede: eles só filtram o host. Se o socket falhar, o dashboard fica sem routers mesmo com o app saudável.
Preciso expor portas 80 e 443 em cada aplicação?
Não. Só o Traefik deve publicar 80 e 443 no host. Os apps ficam na rede interna e o Traefik encaminha pelo nome do serviço e pela porta do container definida no label loadbalancer.server.port. Expor a porta da aplicação no host quebra o isolamento e compete com os entrypoints. Use publish apenas para serviços que realmente precisam de acesso direto, fora do HTTP.
Como testar se o roteamento Traefik está funcionando?
Confira docker compose ps, logs do Traefik e curl -I no Host configurado. O status HTTP esperado é 200 ou 301/308 para HTTPS. No dashboard interno, o router deve aparecer como verde. Combine isso com ss -tlnp nas portas 80/443 e com a resolução DNS do hostname. Se o curl local com cabeçalho Host funciona e o acesso público não, trate firewall e DNS antes de alterar labels.
O Traefik substitui Nginx como proxy reverso no Fedora?
Para stacks Docker com muitos serviços e TLS automático, o Traefik costuma ser mais prático. Nginx continua válido para sites estáticos ou configs manuais. No Fedora 42 com Compose, labels dinâmicas reduzem arquivos de virtual host. Não misture os dois escutando 80/443 no mesmo host sem um deles só em porta interna. Escolha um entrypoint público para evitar bind duplicado.
Conclusão
- Mantenha só o Traefik nas portas 80/443, rede
proxycomum e labels com Host, TLS e porta interna corretos. - Trate acme.json como segredo (600), acompanhe logs ACME e não abra o dashboard sem autenticação.
- Valide sempre com
docker compose ps,curl -Iessantes de culpar a aplicação.
Leia também
- Solucionar erro de Traefik ao rotear containers Docker no Debian 12
- Tutorial: mover Traefik para novo servidor sem perder rotas
- Conexão recusada no Traefik porta 80/443: causa e como reabrir
Precisa de ajuda com Traefik e Docker no Fedora 42?
Um VPS com Fedora 42, Docker e portas 80/443 livres simplifica o roteamento dinâmico e o TLS automático dos seus contêineres. A equipe pode orientar o dimensionamento do host para o seu stack.