【问题标题】:Docker swarm service environment variable is not visible within containerDocker swarm 服务环境变量在容器中不可见
【发布时间】:2022-04-10 04:42:40
【问题描述】:

我正在创建一个带有环境变量的 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

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    在使用--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
    

    【讨论】:

    • 这个例子对我不起作用!当我运行您在此处的命令时,我看到环境变量 PATH、HOSTNAME、TERM 和 HOME,但没有看到 TESTVAR。我正在使用 docker 客户端 20.10.12 和服务器 20.10.3。我正在通过 ssh 与远程 docker 守护进程通信。
    • 当我切换到与本地 docker 守护进程交谈时,您的示例按预期工作。我已将 docker 版本信息添加到我的 OP 中。你认为这应该被报告为错误吗?
    • 我刚刚也尝试了 20.10.3,服务器 20.10.3,客户端和服务器之间没有远程连接,并且存在问题(当我运行您的示例时,TESTVAR 没有 显示在输出中)
    • 我认为你遇到了一个 Synology 错误 github.com/portainer/portainer/issues/…
    猜你喜欢
    • 2022-01-16
    • 2015-07-07
    • 2019-06-26
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2017-12-26
    相关资源
    最近更新 更多