在 Docker 卷中使用 {{.Task.Slot}}

Using {{.Task.Slot}} in Docker volumes

我想使用 {{.Task.Slot}} 语法将单独的卷安装到我的 Docker 服务的每个副本:

services:
  foo:
    ...
    volumes:
      - type: volume
        source: foo{{.Task.Slot}}
        target: /mnt
    deploy:
      mode: replicated
      replicas: 3

volumes:
  foo1:
    ...
  foo2:
    ...
  foo3:
    ...

但是,Docker 失败了:

service foo: undefined volume "foo{{.Task.Slot}}"

source属性中似乎没有解释Go语法,但在target属性中,它运行顺利:

services:
  foo:
    ...
    volumes:
      - type: volume
        source: foo1
        target: /mnt{{.Task.Slot}}

但这显然不是我需要的。

正确的做法是:

services:
  foo:
    ...
    volumes:
      - foo:/mnt
    deploy:
      mode: replicated
      replicas: 3

volumes:
  foo:
    name: 'foo-{{.Task.Slot}}'
    ...

缩放服务然后将根据需要创建卷。

所有学分归于@larsks。