traefik 反代 adguardhome 无法访问

2023-04-25 17:12:20 +08:00
 potatouu
http:
routers:
adhome:
entryPoints:
- "web"
rule: "Host(`ad.ptato.t`)"
service: adguardhome-adhome@docker
middlewares:
- redirect
adhome-tls:
entryPoints:
- "websecure"
rule: "Host(`ad.ptato.t`)"
service: adguardhome-adhome@docker
tls:
certResolver: "mytlschallenge"
options: adhome

services:
adhome:
loadBalancer:
servers:
- url: "https://172.21.0.9:80/"

这是 traefik 的配置。


version: '3'
services:
adguardhome:
image: adguard/adguardhome
restart: always
ports:
- 5222:53/tcp
- 5222:53/udp
- 3000:80/tcp
networks:
traefik_default:
ipv4_address: 172.21.0.9
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf

networks:
traefik_default:
external: true
这是 adguardhome 的文件,使用主机 IP:80 可以正常访问,改成其他端口也可以正常访问,但是反代后用域名无法访问,域名已经解析到主机 IP ,其他容器代理都正常

访问提示 Bad Gateway ,请问下什么原因呢
1067 次点击
所在节点    问与答
13 条回复
kaedeair
2023-04-25 17:44:09 +08:00
Bad Gateway 是网关与服务不能通信,启用 dashboard 和 debug 模式检查一下是哪里的问题。你的 traefik 必须和 adguard 的容器能互相访问,可以进 traefik 的 shell 检查
kaedeair
2023-04-25 17:51:47 +08:00
adguardhome 的 yml 加入以下试试?
labels:
- "traefik.http.services.adguardhome-adhome.loadbalancer.server.port=80"
potatouu
2023-04-25 21:06:48 +08:00
@kaedeair 还是不行
zx900930
2023-04-25 22:19:41 +08:00
url: "http://172.21.0.9:80"

你多打了一个 s
potatouu
2023-04-26 17:39:04 +08:00
@zx900930 试过了也不可以,尴尬
zx900930
2023-04-26 17:56:09 +08:00
@potatouu 那你的 traefik 容器肯定没办法访问 172.21.0.9:80
1. docker exec -it traefik /bin/sh 进到 traefik 的 shell, ping 一下 172.21.0.9, 如果 ping 不通, 检查一下 traefik 和 adg 容器的网段和 Gateway 是否一致.
2. 如果上述办法行不通, 尝试把 URL 改成 外部 ip 地址:3000 看看能否访问, 如果还不行检查一下是不是启用了 iptables.
3. 暂时把 middleware 去掉, 控制一下变量.
potatouu
2023-04-26 18:06:18 +08:00
@zx900930 traefik 容器可以 ping 通 adhome 容器,相互通信是正常的,使用主机 IP:3000 可以正常访问 adguardhome 面板,但是代理后通过域名访问就是 bad gateway
zx900930
2023-04-26 18:49:29 +08:00
provider 是 docker 不是 file, 那么生效的就不是你的 dynamic_config.yml 里的
services:
adhome:
loadBalancer:
servers:
- url: "http://172.21.0.9:80/"
内容.

转而是去 docker api 里提取, 而你又没有在 label 里指定端口, 所以出现了默认 53 端口的问题.

在你的 adg docker compose 里加入以下内容
labels:
- "traefik.enable=true"
- "traefik.http.routers.adhome.rule=Host(`ad.ptato.t`)"
- "traefik.http.routers.adhome.entrypoints=websecure"
- "traefik.http.routers.adhome.tls.certresolver=mytlschallenge"
- "traefik.docker.network=traefik_default"
- "traefik.http.services.adhome.loadbalancer.server.port=80"
zx900930
2023-04-26 18:51:48 +08:00
或者直接把
service: adguardhome-adhome@docker
改成
service: adhome
potatouu
2023-04-26 20:03:21 +08:00
@zx900930
使用 labels 标签后配置为
version: '3'
services:
adguardhome:
image: adguard/adguardhome
restart: always
container_name: adguardhome
ports:
- 5222:53/tcp
- 5222:53/udp
- 3000:3001/tcp
networks:
traefik_default:
ipv4_address: 172.21.0.9
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
labels:
- "traefik.enable=true"
- "traefik.http.routers.adhome.rule=Host(`ad.ptato.t`)"
- "traefik.http.routers.adhome.entrypoints=websecure"
- "traefik.http.routers.adhome.tls.certresolver=mytlschallenge"
- "traefik.docker.network=traefik_default"
- "traefik.http.services.adhome.loadbalancer.server.port=80"

networks:
traefik_default:
external: true

还是无法实现代理,我是使用 traefik 动态独立文件配置的,是否会和该方法有冲突呢,使用第二种方法在 traefik 面板中提示找不到该服务,也无法实现代理,感谢回复
zx900930
2023-04-26 23:01:30 +08:00
@potatouu
ports:
- 5222:53/tcp
- 5222:53/udp
- 3000:3001/tcp

你修改过后把 80 口变成了 3001
那么此时 traefik.http.services.adhome.loadbalancer.server.port=3001

其次, 使用 label 和 dynamic_config 这两种办法都不冲突, 可以共存的. 前者会显示 provider 是 docker, 后者是 file.
potatouu
2023-04-27 17:40:14 +08:00
@zx900930 期间重新部署了 adguardhome ,唯一不同的是这次直接使用了 host 网络,面板端口还是 3001 ,按照此方法访问提示 404
potatouu
2023-04-27 17:42:33 +08:00
@zx900930 面板中 servers 的 URL 显示是 http://127.0.0.1:3001 ,但是我 adguardhome 登入设置使用的是容器地址 172.17.0.1:3001 ,我想应该是这个问题,但是不知道如何去解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX