家庭网络中无法访问Traefik后端Apache容器,求问题排查
一、先检查Traefik与Apache的容器配置
Traefik UI能识别到Apache服务,说明服务注册流程没问题,但路由或端口映射可能存在疏漏:
验证Apache容器的Traefik标签
确保docker-compose.yml里Apache容器的标签配置准确:- 规则必须精确匹配子域名:
traefik.http.routers.apache.rule=Host(apache.docker.mydomain.com) - 指向Apache容器内部的默认端口:
traefik.http.services.apache.loadbalancer.server.port=80(别误写为主机端口) - 绑定Traefik已启用的入口点:比如
traefik.http.routers.apache.entrypoints=web(如果用HTTPS则改为websecure,需对应traefik.yml里的entrypoints配置)
- 规则必须精确匹配子域名:
检查Docker网络配置
确保Traefik和Apache容器加入同一个自定义Docker网络(默认桥接网络可能存在DNS解析问题),比如在docker-compose.yml里定义:networks: traefik-net: external: true并给两个容器都配置
networks: traefik-net查看Traefik调试日志
在traefik.yml里开启debug级日志,排查请求路由情况:log: level: DEBUG重启Traefik后,查看日志中是否有
apache.docker.mydomain.com的请求记录,以及是否存在路由匹配失败的提示
二、排查pfSense的配置
确认子域名DNS解析
用nslookup apache.docker.mydomain.com或dig apache.docker.mydomain.com验证:不管是内网DNS还是外网DNS,都要确保该子域名解析到Docker主机的对应IP(内网访问用主机内网IP,外网访问用公网IP)端口转发规则检查
如果是外网访问,pfSense需将80/443端口转发到Docker主机的对应端口(即Traefik容器映射的主机端口,比如主机80映射到Traefik的80端口),同时确认防火墙规则允许80/443流量进入Docker主机配置NAT反射(Hairpin NAT)
内网设备通过公网域名访问时,必须在pfSense的NAT>端口转发中启用“NAT反射”,否则内网流量无法正常回环到内部服务
三、本地验证服务可用性
- 在Docker主机上执行
docker exec -it <apache容器名> curl localhost,确认Apache容器内部能正常返回默认页面 - 在Docker主机上通过容器名访问:
curl http://<apache容器名>(同一自定义网络下),验证容器间通信正常 - 在内网其他设备直接访问
http://<Docker主机IP>:<Apache映射的主机端口>,确认Apache服务本身无问题
内容的提问来源于stack exchange,提问作者crauscher

