1
kaedeair 2023-04-25 17:44:09 +08:00
Bad Gateway 是网关与服务不能通信,启用 dashboard 和 debug 模式检查一下是哪里的问题。你的 traefik 必须和 adguard 的容器能互相访问,可以进 traefik 的 shell 检查
|
2
kaedeair 2023-04-25 17:51:47 +08:00
adguardhome 的 yml 加入以下试试?
labels: - "traefik.http.services.adguardhome-adhome.loadbalancer.server.port=80" |
4
zx900930 2023-04-25 22:19:41 +08:00
url: "http://172.21.0.9:80"
你多打了一个 s |
6
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 去掉, 控制一下变量. |
7
potatouu OP @zx900930 traefik 容器可以 ping 通 adhome 容器,相互通信是正常的,使用主机 IP:3000 可以正常访问 adguardhome 面板,但是代理后通过域名访问就是 bad gateway
|
8
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" |
9
zx900930 2023-04-26 18:51:48 +08:00
或者直接把
service: adguardhome-adhome@docker 改成 service: adhome |
10
potatouu OP @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 面板中提示找不到该服务,也无法实现代理,感谢回复 |
11
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. |