Docker swarm 服务环境变量在容器内不可见

Docker swarm service environment variable is not visible within container

我正在使用环境变量创建 docker 服务:

docker service create --env TEST=123 myservice

并且我验证了环境变量的设置

$ docker service inspect myservice
...
ContainerSpec:
 Env:           TEST=123
...

但是环境变量不会出现在 docker 容器中。特别是,docker 容器内的代码 运行 打印 os.Environ() 并且在日志中我只看到标准环境变量:

$ docker service logs myservice
[HOSTNAME=48bcddab9204 SHLVL=1 HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/app]

所以没有设置环境变量“TEST”。如何设置定义此环境变量的服务?

docker version的输出是

Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.5
 Git commit:        e91ed5707e
 Built:             Mon Dec 13 22:31:40 2021
 OS/Arch:           linux/amd64
 Context:           synology
 Experimental:      true

Server:
 Engine:
  Version:          20.10.3
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.15.13
  Git commit:       a3bc36f
  Built:            Thu Aug 19 07:11:25 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.4.3
  GitCommit:        ea3508454ff2268c32720eb4d2fc9816d6f75f88
 runc:
  Version:          v1.0.0-rc93
  GitCommit:        31cc25f16f5eba4d0f53e35374532873744f4b31
 docker-init:
  Version:          0.19.0
  GitCommit:        ed96d00

使用--env时,应在环境中定义变量。如果那没有发生,我们需要一个 complete example 来重现。这是一个显示它有效的示例:

$ docker service create --name env-test --env TESTVAR=123 busybox tail -f /dev/null
nj9l6z57d9pviztyp9pglmv4r
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 

$ docker ps -l
CONTAINER ID   IMAGE            COMMAND               CREATED          STATUS          PORTS     NAMES
697c1bf221b1   busybox:latest   "tail -f /dev/null"   20 seconds ago   Up 19 seconds             env-test.1.vlrepc8mqqvx7gysh2qsymja8

$ docker exec -it env-test.1.vlrepc8mqqvx7gysh2qsymja8 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=697c1bf221b1
TERM=xterm
TESTVAR=123
HOME=/root