组合服务定义中的模板占位符(环境数组)

Template Placerholder in compose service definition (environment array)

我读到 here 你可以在 docker-compose.yml

中使用 go 模板占位符

我已经尝试了多种语法方法,但我从未设法替换占位符。

version: "3.8"

x-base: &base
    image: "alpine"
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]

services:
  foo:
    <<: *base
    environment:
      - TEST1={{.Service.ID}}
      - "TEST2={{.Service.ID}}"
      - 'TEST3={{.Service.ID}}'
      - TEST4="{{.Service.ID}}"
      - TEST5='{{.Service.ID}}'
  bar:
    <<: *base
    environment:
      TEST1: "{{.Service.ID}}"
      TEST2: '{{.Service.ID}}'

当我检查变量时,我得到了这个。

➜  test docker exec test_foo_1 printenv                  
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=9165fc2da385
TEST1={{.Service.ID}}
TEST2={{.Service.ID}}
TEST3={{.Service.ID}}
TEST4="{{.Service.ID}}"
TEST5='{{.Service.ID}}'
HOME=/root
➜  test docker exec test_bar_1 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=393430a158d1
TEST1={{.Service.ID}}
TEST2={{.Service.ID}}
HOME=/root

这只适用于 swarm,不适用于 compose。

docker swarm init --advertise-addr myhost
docker stack deploy -c docker-compose.yml test