【问题标题】:How to load Docker environment variables in container如何在容器中加载 Docker 环境变量
【发布时间】:2020-01-28 22:31:56
【问题描述】:

我正在构建一个基于带有 systemd 的 ubuntu 映像的映像。我需要开始 TigerVNC 作为一项服务,它依赖于我在我的 Dockerfile,比如密码。

FROM ubuntu-systemd

ENV VNC_PW="some-password"

ENTRYPOINT ["/lib/systemd/systemd"]

此服务的单元文件有一行是:

ExecStart=/usr/sbin/runuser -l root -c "/some/script.sh" 

由于 systemd 有自己的环境,我无权访问环境变量 在我的 Dockerfile 中定义。我期待以root身份运行脚本 登录 shell('-l' 标志)可以让我访问这些变量,但它没有。 我知道我需要的变量在 /proc/1/environ 但我不知道如何加载它们,因为 例如在 .profile 文件中为 root 添加一些内容。

谢谢。

【问题讨论】:

  • 你为什么不直接在单元文件中设置环境,或者在覆盖插入(/etc/systemd/system/<yourservice>.service.d/overridefile.conf)中?在Service 部分中 => Environment="VNC_PW=somepassword"
  • 因为我想在运行控制台时覆盖密码:docker container run ... -e VNC_PW="another_password"。非常感谢您的成功。
  • 好吧,那就不要使用 systemd,这在 docker 容器中还是有点尴尬。除非您有非常特殊的理由这样做,否则每个容器都应包含您使用其命令启动的单个服务。现在您的命令变为/some/script.sh,它将毫无问题地读取您的环境变量。
  • 再次感谢@Zeitounator。这个容器用于测试,我需要运行 gnome 桌面,虽然我已经尝试了几个星期,但如果没有 systemd,我将无法这样做。我听说过 systemd 替代品 [github.com/gdraheim/docker-systemctl-replacement],但我更愿意继续使用 systemd。

标签: docker environment-variables systemd


【解决方案1】:

有点棘手,但我可以通过包含以下行在 ExecStart 属性的 /some/script.sh 中加载环境变量:

export `xargs --null --max-args=1 echo < /proc/1/environ`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2016-03-07
    • 2015-08-10
    相关资源
    最近更新 更多