使用host网络模式的Traefik通过docker-compose启动报端口缺失错误如何解决
问题根因
你为Traefik服务本身配置了traefik.enable=true标签,Traefik的Docker provider会把自身容器也纳入反向代理的服务扫描范围。host网络模式下容器不会在Docker层面声明暴露端口,Traefik扫描不到对应端口就会抛出该错误,该报错和Docker本身的端口映射规则无关,你对host网络无需声明ports的认知是正确的。
解决方案
两种方案任选其一即可:
- 方案一:在Traefik服务的labels配置段新增一行标签,明确告知Traefik自身服务的可用端口,端口可以填Traefik已监听的80/443任意一个,修改后的labels段如下:
labels: - "traefik.enable=true" # 新增下方这一行 - "traefik.http.services.traefik.loadbalancer.server.port=80" - "traefik.http.routers.dashboard.rule=Host(`msite.mdomain`)" - "traefik.http.routers.dashboard.tls=true" - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt" - "traefik.http.routers.dashboard.service=api@internal" - "traefik.http.routers.dashboard.middlewares=auth" - "traefik.http.middlewares.auth.basicauth.users=suser:spass"
- 方案二:在
traefik.toml的[providers.docker]配置段新增useBindPortIP = true参数,开启后Traefik会优先读取容器内部监听的端口,无需额外配置标签:
[providers] [providers.docker] exposedByDefault = false # 新增下方这一行 useBindPortIP = true
内容的提问来源于stack exchange,提问作者SPinheiro
相关产品推荐
相关产品推荐

