traefik 配置 docker + 文件
traefik configuration docker + file
今天,我遇到了 traefik 的问题。
我正在尝试使用 traefik 作为反向代理。
在我的网络中,我有一些容器在 docker(with swarm),还有一些其他的 servers/VM .
所以,我想将一些子域重定向到容器,将其他一些子域重定向到服务器。
所以目前,我已经做了一些测试,我可以重定向到服务器,或者重定向到 docker 个容器,但不能同时重定向到这两个。
以下配置在"file"模式下工作,如果我注释所有"file"部分,它在docker模式下工作。
那么,如何做到这一点呢?这只是一个配置问题吗?或者 traefik 无法处理(看起来很奇怪,因为 traefik ui 在选项卡模式下显示 "file"/"docker")?
我正在使用 docker 图片:traefik:1.7-rc1
使用此配置的 traefik (traefik.toml) :
debug = false
logLevel = "DEBUG"
defaultEntryPoints = ["https","http"]
insecureSkipVerify = true
sendAnonymousUsage = true
[api]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "site.com"
watch = true
swarmMode = true
[file]
[backends]
[backends.nas]
[backends.nas.LoadBalancer]
method = "drr"
[backends.nas.servers.server1]
url = "https://192.168.1.38"
weight = 1
[backends.teapot]
[backends.teapot.LoadBalancer]
method = "drr"
[backends.teapot.servers.server1]
url = "https://192.168.1.40"
weight = 1
[backends.gitserver]
[backends.gitserver.LoadBalancer]
method = "drr"
[backends.gitserver.servers.server1]
url = "https://192.168.1.60"
weight = 1
[frontends]
[frontends.nas]
backend = "nas"
passHostHeader = true
[frontends.nas.routes.test]
rule = "Host: nas.site.com"
[frontends.teapot]
backend = "teapot"
passHostHeader = true
[frontends.teapot.routes.test]
rule = "Host: teapot.site.com"
[frontends.tpt]
backend = "teapot"
passHostHeader = true
[frontends.tpt.routes.test]
rule = "Host: tpt.site.com"
[frontends.gitserver]
backend = "gitserver"
passHostHeader = true
[frontends.gitserver.routes.test]
rule = "Host: gitserver.site.com"
[acme]
email = "email@site.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
这是我为 traefik 撰写的文章:
version: '3'
services:
reverse-proxy:
image: traefik:1.7 # The official Traefik docker image
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
- 443:443
networks:
- web
deploy:
labels:
- "traefik.enable=false"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
- /mnt/hgfs/docker/traefik/config/traefik.toml:/traefik.toml
- /mnt/hgfs/docker/traefik/config/acme.json:/acme.json:rw
networks:
web:
external: true
这里是我的服务示例:
version: '3'
services:
tautulli:
image: tautulli/tautulli:latest
environment:
UID: 1000
GID: 1000
TZ: Europe/Paris
networks:
- web
- default
deploy:
labels:
- "traefik.frontend.rule=Host:tautulli.site.com"
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.port=8181"
- "traefik.protocol=http"
ports:
- "8181:8181"
volumes:
- /mnt/hgfs/docker/tautulli/config:/config
- /mnt/hgfs/docker/tautulli/logs:/logs
networks:
web:
external: true
此外,我还有其他一些关于 traefik 的问题,比如在 traefik 容器之后创建的容器没有链接,即使是 watch = true
,文件也一样,但我会一一解决问题。
感谢您的回答。
编辑:
在与 traefik 支持人员讨论后,我了解到:
- ws/wss 入口点没用
- 使用命令参数,或 toml,而不是两者
- 标签需要在服务配置中部署
好的,所以我终于找到了解决方案。
其实我在windows上用的是vmware,有一个linux的vm,acme.json的权限一直是777,所以traefik不喜欢,跳过let's encrypt support .
但是,这也有一些副作用,比如只考虑其中一个配置(文件,或 docker)。
最后,要解决这个问题:
删除绑定到 acme.json
今天,我遇到了 traefik 的问题。
我正在尝试使用 traefik 作为反向代理。 在我的网络中,我有一些容器在 docker(with swarm),还有一些其他的 servers/VM .
所以,我想将一些子域重定向到容器,将其他一些子域重定向到服务器。
所以目前,我已经做了一些测试,我可以重定向到服务器,或者重定向到 docker 个容器,但不能同时重定向到这两个。
以下配置在"file"模式下工作,如果我注释所有"file"部分,它在docker模式下工作。
那么,如何做到这一点呢?这只是一个配置问题吗?或者 traefik 无法处理(看起来很奇怪,因为 traefik ui 在选项卡模式下显示 "file"/"docker")?
我正在使用 docker 图片:traefik:1.7-rc1
使用此配置的 traefik (traefik.toml) :
debug = false
logLevel = "DEBUG"
defaultEntryPoints = ["https","http"]
insecureSkipVerify = true
sendAnonymousUsage = true
[api]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "site.com"
watch = true
swarmMode = true
[file]
[backends]
[backends.nas]
[backends.nas.LoadBalancer]
method = "drr"
[backends.nas.servers.server1]
url = "https://192.168.1.38"
weight = 1
[backends.teapot]
[backends.teapot.LoadBalancer]
method = "drr"
[backends.teapot.servers.server1]
url = "https://192.168.1.40"
weight = 1
[backends.gitserver]
[backends.gitserver.LoadBalancer]
method = "drr"
[backends.gitserver.servers.server1]
url = "https://192.168.1.60"
weight = 1
[frontends]
[frontends.nas]
backend = "nas"
passHostHeader = true
[frontends.nas.routes.test]
rule = "Host: nas.site.com"
[frontends.teapot]
backend = "teapot"
passHostHeader = true
[frontends.teapot.routes.test]
rule = "Host: teapot.site.com"
[frontends.tpt]
backend = "teapot"
passHostHeader = true
[frontends.tpt.routes.test]
rule = "Host: tpt.site.com"
[frontends.gitserver]
backend = "gitserver"
passHostHeader = true
[frontends.gitserver.routes.test]
rule = "Host: gitserver.site.com"
[acme]
email = "email@site.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
这是我为 traefik 撰写的文章:
version: '3'
services:
reverse-proxy:
image: traefik:1.7 # The official Traefik docker image
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
- 443:443
networks:
- web
deploy:
labels:
- "traefik.enable=false"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
- /mnt/hgfs/docker/traefik/config/traefik.toml:/traefik.toml
- /mnt/hgfs/docker/traefik/config/acme.json:/acme.json:rw
networks:
web:
external: true
这里是我的服务示例:
version: '3'
services:
tautulli:
image: tautulli/tautulli:latest
environment:
UID: 1000
GID: 1000
TZ: Europe/Paris
networks:
- web
- default
deploy:
labels:
- "traefik.frontend.rule=Host:tautulli.site.com"
- "traefik.docker.network=web"
- "traefik.enable=true"
- "traefik.port=8181"
- "traefik.protocol=http"
ports:
- "8181:8181"
volumes:
- /mnt/hgfs/docker/tautulli/config:/config
- /mnt/hgfs/docker/tautulli/logs:/logs
networks:
web:
external: true
此外,我还有其他一些关于 traefik 的问题,比如在 traefik 容器之后创建的容器没有链接,即使是 watch = true
,文件也一样,但我会一一解决问题。
感谢您的回答。
编辑:
在与 traefik 支持人员讨论后,我了解到:
- ws/wss 入口点没用
- 使用命令参数,或 toml,而不是两者
- 标签需要在服务配置中部署
好的,所以我终于找到了解决方案。
其实我在windows上用的是vmware,有一个linux的vm,acme.json的权限一直是777,所以traefik不喜欢,跳过let's encrypt support .
但是,这也有一些副作用,比如只考虑其中一个配置(文件,或 docker)。
最后,要解决这个问题:
删除绑定到 acme.json