由于内网docker上跑了一些服务,但是发现经常不记得它们的端口号,于是很多时候直接就把它们忘掉了,也就偶尔记得一些常用的。遂决定上traefik来用域名去访问它们。
配置泛域名解析
最好是有一个没啥用的域名,如果域名已经在其他地方用了,那就要保证添加的泛域名不要把原来的解析记录给搞失效了,比如我的域名就已经配置过泛域名了。于是随便找了个linx.com的,用来在内网使用,没打算上https,所以问题不大。
由于内网已有mosdns服务,直接在mosdns的hosts.txt 增加一条 domain:linx.com 10.10.0.16
随便ping一个 xxx.linx.com 测试下看看
配置traefik容器
-
image: traefik:latest
-
command:
1 2 3 4 5 6 7 8
'--api=true' '--api.dashboard=true' '--api.insecure=true' '--entrypoints.http.address=:80' '--providers.docker=true' '--providers.docker.endpoint=unix:///var/run/docker.sock' '--providers.docker.exposedbydefault=true' '--providers.docker.defaultrule=Host(`{{ .ContainerName }}.linx.com`)'
最后两行的意思是,反代所有容器,并且以 容器名.linx.com 的方式访问,这样就无需到每个容器里都增加labels了
-
volume:
/var/run/docker.sock:/var/run/docker.sock
-
network:
host
由于还有一些服务是docker compose运行的,不想把这些都跑在一个network下,于是就偷个懒
-
labels:
1 2 3 4 5 6
traefik.http.routers.traefik-dashboard-api.entrypoints=http traefik.http.routers.traefik-dashboard-api.rule=Host(`linx.com`) && PathPrefix(`/api`) traefik.http.routers.traefik-dashboard-api.service=api@internal traefik.http.routers.traefik-dashboard.entrypoints=http traefik.http.routers.traefik-dashboard.rule=Host(`linx.com`) traefik.http.routers.traefik-dashboard.service=dashboard@internal
-
restart:
unless-stoped
手动指定端口
如果一个容器有多个端口,然后它运行时,你发现它的第一个端口(docker ps)不是你要的端口,则需要手动指定端口,通过labels设置即可
`traefik.http.services.emby-emby.loadbalancer.server.port=8096`
docker compose创建的服务,在traefik中会以 `堆栈名-服务名` 的形式存在
docker compose 下是这样的
|
|