【发布时间】: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