在我的 ubuntu 服务器上,我使用 Traefik 作为反向代理服务器。 Traefik 在 docker 容器中运行,它根据域名将连接转发到也在 docker 容器中运行的其他服务。对于每个容器,我使用 docker-compose.yml 文件。
现在一切都按预期运行,除了服务 Netdata。 Netdata是使用network_mode:host配置的,这意味着netdata直接连接到主机的端口,在本例中为端口19999。我试图实现的是Traefik将对netdata的请求转发到主机的19999端口。发生的情况是“重定向太多”错误。
这是我的 Traefik 的 docker-compose.yml 的样子:
version: '3.9'
services:
traefik:
image: traefik:v3.0
ports:
- 80:80
- 443:443
expose:
- 8080
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./letsencrypt:/letsencrypt
- ./log:/var/log
command:
- --log.level=INFO
- --log.filepath=/var/log/traefik.log
- --accesslog=true
- --accesslog.filepath=/var/log/access.log
- --api.dashboard=true
- --providers.docker.network=proxy
- --providers.docker.exposedByDefault=false
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entryPoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.websecure.address=:443
- --entrypoints.websecure.asDefault=true
- --entrypoints.websecure.http.tls.certresolver=tlsresolver
- [email protected]
- --certificatesresolvers.tlsresolver.acme.tlschallenge=true
- --certificatesresolvers.tlsresolver.acme.storage=/letsencrypt/acme.json
labels:
- traefik.enable=true
# dashboard
- traefik.http.routers.dashboard.rule=Host(`dashboard.mycoolwebapp.io`)
- traefik.http.services.dashboard.loadbalancer.server.port=8080
- traefik.http.routers.dashboard.service=api@internal
- traefik.http.routers.dashboard.middlewares=api-auth
- traefik.http.middlewares.api-auth.basicauth.users=xxxx:$$apr1$$xxxxx$xxxxxxxxxx/
# netdata
- traefik.http.routers.netdata.rule=Host(`netdata.mycoolwebapp.io`)
- traefik.http.routers.netdata.service=netdata
- traefik.http.services.netdata.loadbalancer.server.port=19999
networks:
proxy:
external: true
name: proxy
我的 Netdata 的 docker-compose.yml 非常基本:
version: '3'
services:
netdata:
image: netdata/netdata
container_name: netdata
pid: host
network_mode: host
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- ./netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /run/dbus:/run/dbus:ro
volumes:
netdatalib:
netdatacache:
我的想法是让 Traefik 将请求转发到主机(服务器)的端口 19999 上的 localhost。 但它似乎不起作用,它不知何故导致了太多的请求。
我希望你们能看到这个问题,但我有点卡在这里。
当使用标签进行 Traefik Docker 配置发现时,它们始终需要放置在目标容器上,因为这将是 Traefik 将代理/转发请求到的目标容器。
如果网络数据服务/容器上的标签不起作用,因为它使用主机网络,那么我会尝试动态配置文件,它可以使用任何目标IP,并由静态配置中的
providers.file
加载(example ).