如何配置Traefik实现无需加端口即可代理访问本地域名
问题原因
你当前访问dashboard.local:8081能正常打开,是因为流量直接走了宿主机映射的容器端口,完全没有经过Traefik代理,你的配置存在几处错误导致Traefik规则未生效。
调整步骤
- 修正路由匹配规则:原配置的路由规则缺少
Host匹配关键字,Traefik无法识别域名匹配逻辑,修改为:- "traefik.http.routers.homer.rule=Host(`dashboard.local`)" - 修正负载均衡目标端口:homer容器内部监听的是8080端口,容器加入
web网络后Traefik直接通过内部网络访问容器,不需要走宿主机映射的8081端口,修改为:- "traefik.http.services.homer.loadbalancer.server.port=8080" - 确认Traefik自身端口配置:确保你Traefik服务中定义的
web入口点绑定了宿主机的80端口,浏览器访问不带端口的域名默认走80端口,Traefik的配置需要包含以下端口映射:ports: - 80:80 # 对应名为web的entrypoint - 可选优化:删除homer服务中的
ports: - 8081:8080配置,使用Traefik代理后不需要再把容器端口暴露到宿主机,避免端口冲突。
修正后的完整homer服务配置
--- version: "2" services: homer: image: b4bz/homer container_name: homer volumes: - /home/mbell/homer/assets/:/www/assets # 已删除多余的端口映射配置 restart: unless-stopped tty: true labels: - "traefik.enable=true" - "traefik.docker.network=web" - "traefik.http.routers.homer.rule=Host(`dashboard.local`)" - "traefik.http.routers.homer.entrypoints=web" - "traefik.http.services.homer.loadbalancer.server.port=8080" networks: - web networks: web: external: true
配置修改完成后重新启动服务即可通过dashboard.local直接访问。
内容的提问来源于stack exchange,提问作者digital
相关产品推荐
相关产品推荐

