【发布时间】:2020-12-13 21:32:51
【问题描述】:
我在家庭网络中的 raspberrypi 上运行 traefik (v. 2.3.5) 和其他服务。每个服务都在同一台机器上的不同端口上运行。 我希望 traefik 将呼叫从子路径重定向到不同的 url。像这样:
http://myServer/omv --> http://myServer:8000
http://myServer/heimdall --> http://myServer:8003
但是我不能让它工作。我的路由器没有提供域/子域,所以我必须使用子路径。
OMV 安装在本地,所以我创建了一个文件提供程序,这是唯一一个可以工作的。我无法找出我的 docker-compose 文件做错了什么,例如海姆达尔。
这是 traefik docker-compose.yml:
version: '2'
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- 80:80
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /root/myDockers/traefik/data/traefik.yml:/traefik.yml:ro
- /root/myDockers/traefik/data/non-docker-services.yml:/non-docker-services.yml:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http"
- "traefik.http.routers.traefik.rule=PathPrefix(`/api`) || PathPrefix(`/traefik`)"
- "traefik.http.middlewares.traefik-auth.basicauth.users=XXXX:YYYYYYYYYYYYYYYYY"
- "traefik.http.routers.traefik.middlewares=traefik-auth,traefik-strip-prefix"
- "traefik.http.middlewares.traefik-strip-prefix.stripprefix.prefixes=/traefik"
- "traefik.http.routers.traefik.service=api@internal"
Traefik.yml:
api:
dashboard: true
# insecure: true
debug: true
log:
format: json
level: DEBUG
accessLog:
format: common
entryPoints:
http:
address: ":80"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
watch: true
file:
filename: /non-docker-services.yml
watch: true
非 docker-services.yml:
http:
routers:
omv:
entryPoints:
- "http"
rule: "PathPrefix(`/omv`)"
service: omv
middlewares:
- omv-rr
middlewares:
omv-rr:
redirectRegex:
regex: "^http://myServer/omv(.*)"
replacement: "http://myServer:8000${1}"
permanent: true
services:
omv:
loadBalancer:
servers:
- url: "http://myServer:8000"
passHostHeader: true
heimdall docker-compose.yml:
version: "2"
services:
heimdall:
image: ghcr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- /root/myDockers/heimdall/appdata/config:/config
ports:
- 8003:80
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.hppt.routers.heimdall.entrypoints=http"
- "traefik.http.routers.heimdall.rule=PathPrefix(`/heimdall`)"
- "traefik.http.routers.heimdall.middlewares=heimdall-redirect"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.regex=`^http://myServer/heimdall(.*)`"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.replacement=`http://myServer:8003`"
- "traefik.http.middlewares.heimdall-redirect.redirectregex.permanent=true"
- "traefik.http.services.heimdall.loadbalancer.server.url=`http://myServer:8003`"
当我调用 http://myServer/heimdall 时,什么也没有发生,过了一段时间后我得到了超时。我认为原因是,traefik 正在尝试转发 到 heimdall 172.31.0.2:80 的 docker 内部网络地址,我的客户当然无法访问该地址。在 traefik 日志中它指出: 交易 | {"entryPointName":"http","level":"debug","msg":"正在创建服务器 0 http://172.31.0.2:80","routerName":"heimdall@docker","serverName":0,"serviceName":"heimdall","time":"2020-12-13T21:55:02+01:00"}
谁能指出我正确的方向?
【问题讨论】:
标签: docker redirect docker-compose traefik self-hosting