You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm环境下subdomain.localhost解析失败问题排查

排查Docker Swarm中Traefik子域名反向代理失效问题

咱们一步步来定位你遇到的问题——子域名访问不通但端口直接访问正常,大概率是Traefik的路由配置、Swarm集成或者网络环节出了小纰漏,以下是针对性的排查步骤:

1. 先确认Traefik的Swarm模式核心配置

首先得保证Traefik正确识别Swarm集群里的服务:

  • 检查Traefik启动命令/Compose配置里有没有启用Swarm Provider:必须包含--providers.docker.swarmmode=true参数,不然Traefik只会识别单节点的容器,不会处理Swarm服务。
  • 确认Traefik服务挂载了Docker Socket:需要有/var/run/docker.sock:/var/run/docker.sock的卷挂载,这是Traefik获取Swarm服务元数据的关键。
  • 查看Traefik日志找线索:执行docker service logs <你的Traefik服务名>,重点看有没有类似no route found for host "subdomain.localhost"或者路由注册失败的报错,这能直接指向问题根源。

2. 校验应用服务的Traefik标签配置

应用容器的Traefik标签是路由规则的核心,必须准确匹配:

  • 确保标签里的Host规则和你访问的子域名完全一致,比如:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`subdomain.localhost`)"
      - "traefik.http.routers.myapp.entrypoints=web"
      - "traefik.http.services.myapp.loadbalancer.server.port=80" # 这里要填应用容器的实际监听端口,不是主机映射端口
    
    注意:Host里的域名要和你curl的完全一致,不能有大小写、多/少小数点的问题;entrypoints要和Traefik配置里的入口点名称对应(比如Traefik默认的入口点叫web,对应80端口)。
  • 如果你之前配置的是word.beluga,现在要访问subdomain.localhost,要确认标签里的规则已经更新成后者,避免规则不匹配。

3. 验证本地DNS与请求完整性

  • 先确认subdomain.localhost解析正确:执行ping subdomain.localhost或nslookup subdomain.localhost,确保返回的是127.0.0.1,如果解析错了,请求根本到不了Traefik。
  • 用curl -v http://subdomain.localhost查看请求详情,重点看Host请求头是不是subdomain.localhost——如果这个字段不对,Traefik的路由规则就没法匹配。对比端口访问的curl -v http://localhost:xxxx,看看两个请求的响应差异:如果子域名请求返回的是Traefik的默认404页面,说明路由没匹配上;如果返回的是其他内容,可能是Traefik接收到了请求但转发有问题。

4. 检查Traefik的端口映射与网络连通性

  • 确认Traefik服务的端口映射正确:Swarm服务的端口配置必须是80:80/tcp(或者你用的其他入口端口),这样主机的80端口请求才能转发到Traefik容器。
  • 确保Traefik和应用服务在同一个Overlay网络:Swarm里不同Overlay网络的服务默认隔离,所以要把Traefik和应用都加入同一个自定义Overlay网络(比如traefik-public)。可以用docker service inspect <服务名>查看服务所属的网络,也可以在Traefik容器里ping应用服务名,测试连通性:docker exec -it <Traefik容器ID> ping <应用服务名>。

5. 排查HTTPS相关的额外问题

如果你的Traefik配置了HTTPS,要确认:

  • 有没有为subdomain.localhost配置证书(比如用Let's Encrypt的本地证书,或者自签名证书),不然浏览器会拦截请求,curl也会因为证书问题返回异常。
  • 是不是配置了HTTP到HTTPS的强制重定向,而你访问的时候用的是HTTP,导致请求被重定向到HTTPS但证书不生效,出现访问失败。

先从Traefik日志和应用标签配置入手,这两个是最常见的问题点,排查出具体错误后再针对性调整配置就行。

内容的提问来源于stack exchange,提问作者ravenwing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:21:16