OSX 10.11.6上Traefik搭配Docker执行官方教程遇网关超时问题
嘿,我之前也碰到过几乎一模一样的情况!结合你给出的环境和操作细节,咱们一步步来排查解决这个网关超时的问题:
先明确咱们的环境背景
- 系统:OSX 10.11.6
- Docker版本:17.12.0-ce (build c97c6d6)
- 操作场景:跟着Traefik官方测试教程走,一开始只有默认Docker网络、没其他容器;Traefik启动正常,但
emilevauge/whoami容器一开始网络有问题,手动创建重启后,能在Traefik Web UI里看到它,但用curl访问时一直报网关超时,日志来自Traefik容器。
排查&解决步骤
1. 先确认两个容器是不是在同一个网络里
这是最常见的坑!Traefik要能路由到whoami,必须和它在同一个网络(或者网络之间能互通)。你可以用这两个命令查一下:
docker inspect traefik | grep Networks docker inspect whoami | grep Networks
如果输出里的网络不一样,那肯定没法路由。建议直接创建一个自定义Docker网络,把两个容器都加进去:
# 创建自定义网络 docker network create traefik-proxy # 重启Traefik加入这个网络(记得替换成你原来的启动参数,保留--api --docker这些) docker run -d --name traefik --network traefik-proxy -p 80:80 -p 8080:8080 traefik --api --docker # 启动whoami加入同一个网络 docker run -d --name whoami --network traefik-proxy emilevauge/whoami
自定义网络默认支持容器名解析,比默认的bridge网络靠谱多了。
2. 先验证whoami容器本身能不能访问
有时候网关超时不是Traefik的问题,是whoami本身没跑起来。你可以先直接访问whoami的端口:
# 查whoami的端口映射 docker port whoami # 假设输出是80/tcp -> 0.0.0.0:32768,那直接curl这个端口 curl localhost:32768
如果这个访问都失败,那得先解决whoami的启动问题;如果能正常返回内容,再去看Traefik的配置。
3. 调Traefik日志级别,看具体报错
把Traefik的日志调到DEBUG级别,重启后再试curl,就能看到更详细的错误信息了。启动时加个参数就行:
--logLevel=DEBUG
重点看日志里有没有no server available for service、connection refused或者DNS解析失败的条目,这些能直接告诉你问题出在哪。
4. 检查默认bridge网络的限制
如果你坚持用默认的bridge网络,那得注意:默认网络里容器间通信只能用IP地址,不能用容器名(除非手动配置DNS)。如果Traefik是靠容器名来识别服务的,那肯定会找不到whoami,导致网关超时。这种情况下要么改成自定义网络,要么手动配置容器的DNS解析。
总结
大概率是网络归属或者默认网络的解析限制导致的问题。先检查两个容器的网络归属,再验证whoami本身的可达性,最后调整网络配置,应该就能解决网关超时的问题了。
内容的提问来源于stack exchange,提问作者Juan Treminio




