小编Rob*_*cco的帖子

Traefik 2.0和Docker设置中间件,无需命名路由器

我正在将 traefik 2.0 与 docker 提供程序(群模式)一起使用,并且我希望为在 traefik 上发布自身的服务提供默认方式,以避免冲突。

我设法创建了一个满足我的需求的默认规则,但我现在很挣扎,因为我没有找到一种方法来提供默认中间件来去除前缀。

有没有一种方法可以添加 docker 服务标签,而无需提供特定的路由器名称,但仍然向 traefik 隐式创建的任何路由器添加中间件?或者有没有办法像默认规则一样定义默认中间件?

我试图实现的解决方案是删除以下标签中的所有变量替换,从而减少整个定义的冗长性,但又不会让自己陷入命名冲突:

        - traefik.enable=true
        - traefik.http.services.${ENV:-dev}_${STACK}_whoami.loadbalancer.server.port=80
        - traefik.http.middlewares.${ENV:-dev}_${STACK}_whoami.stripprefix.prefixes=/${STACK}
        - traefik.http.routers.${ENV:-dev}_${STACK}_whoami.entrypoints=http
        - traefik.http.routers.${ENV:-dev}_${STACK}_whoami.rule=PathPrefix(`/${STACK}/whoami`)
        - traefik.http.routers.${ENV:-dev}_${STACK}_whoami.middlewares=${ENV:-dev}_${STACK}_whoami@docker
Run Code Online (Sandbox Code Playgroud)

希望它可以变成如下所示,default在部署堆栈时使用 Docker 分配的隐式服务名称的魔力在哪里:

        - traefik.enable=true
        - traefik.http.services.default.loadbalancer.server.port=80
        - traefik.http.middlewares.default.stripprefix.prefixes=/${STACK}
        - traefik.http.routers.default.entrypoints=http
        - traefik.http.routers.default.rule=PathPrefix(`/${STACK}/whoami`)
        - traefik.http.routers.default.middlewares=default@docker
Run Code Online (Sandbox Code Playgroud)

我尝试了以下操作,但显然 go 模板没有被替换:

        - traefik.enable=true
        - traefik.http.services.{{ .Name }}.loadbalancer.server.port=80
        - traefik.http.middlewares.{{ .Name }}.stripprefix.prefixes=/${STACK}
        - traefik.http.routers.{{ .Name }}.entrypoints=http
        - traefik.http.routers.{{ .Name }}.rule=PathPrefix(`/${STACK}/whoami`)
        - traefik.http.routers.{{ .Name }}.middlewares={{ .Name }}@docker
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm traefik

6
推荐指数
1
解决办法
2168
查看次数

docker-compose 文件中哪里允许使用 Go 模板?

标题是不言自明的:我找不到描述撰写文件中允许使用 Go 模板的文档。

换句话说,我想知道支持以下哪一项:

version: "3.7"


services:
  whoami:
    image: "containous/whoami"
    environment:
      - VALUE='{{.Name}}'
      - NAME_{{.Name}}='NAME'
    deploy:
      labels:
        - value={{.Name}}
        - name_{{.Name}}=NAME
    networks:
      - {{.Name}}
Run Code Online (Sandbox Code Playgroud)

go-templates docker-compose

5
推荐指数
1
解决办法
3573
查看次数