Traefik+Docker Swarm+Cloudflare部署后域名404问题求助
排查Traefik路由404问题的步骤
1. 确认域名解析与Cloudflare配置
- 检查Cloudflare中
uhu.sheralink.com的DNS记录:确保A/AAAA记录指向Swarm集群的公网IP,代理状态(橙色云朵)设置合理——若Traefik直接暴露公网,可暂时切换为灰色(关闭代理)测试;若保留代理,需将SSL/TLS模式设为Flexible或Full,且与Traefik的SSL配置匹配。 - 本地执行
nslookup uhu.sheralink.com或dig uhu.sheralink.com,验证解析到的IP是否正确。
2. 核对whoami服务的Traefik标签配置
- 检查服务的Docker Stack/Compose文件,确保标签无语法错误:
- 必须包含
traefik.http.routers.whoami.rule=Host(uhu.sheralink.com),注意域名拼写、括号与引号的正确使用。 - 确认
traefik.http.services.whoami.loadbalancer.server.port指定了正确的容器端口(whoami默认是80)。 - 需添加
traefik.enable=true标签,且服务与Traefik加入同一个Swarm overlay网络(而非默认bridge网络)。
- 必须包含
- 登录Traefik仪表盘,在HTTP Routers和HTTP Services页面,确认
uhu.sheralink.com对应的路由、服务已存在且状态为enabled。
3. 验证Traefik静态配置
- 确保
traefik.yml或启动参数中已启用Swarm provider:providers: docker: swarmMode: true exposedByDefault: false # 仅启用带traefik.enable=true的服务,避免冗余 - 检查Traefik的端口发布配置:确认80/443端口已正确发布到主机,且主机防火墙未拦截这些端口。
4. 检查Swarm网络连通性
- 执行
docker service inspect whoami,确认服务与Traefik加入的是同一个overlay网络——Swarm跨节点服务通信依赖overlay网络,bridge网络无法满足。
5. 调试请求细节
- 开启并查看Traefik访问日志,确认请求的Host头是否匹配、是否命中路由:
docker exec -it <traefik-container-id> tail -f /var/log/traefik/access.log - 在whoami容器内抓包,验证是否收到Traefik转发的请求:
docker exec -it <whoami-container-id> tcpdump -i any port 80
6. 排查Cloudflare规则干扰
- 检查Cloudflare的Page Rules、WAF规则,确认没有拦截
uhu.sheralink.com的请求。 - 若使用SSL证书,在Traefik仪表盘Certificates页面确认证书已成功颁发(无论是Cloudflare证书还是Let's Encrypt证书)。
内容的提问来源于stack exchange,提问作者Jais Anasrulloh Ja'fari
相关产品推荐
相关产品推荐

