我有一个使用 Jetty 运行的 Web 应用程序。它部署为 Pod 并使用 jetty:jdk21 基础镜像。在 pod 中,我配置从秘密中提取的环境变量。
如果进入 pod 并运行 printenv 命令,我可以看到这些变量。但是,当我的 servlet 中的 Java 代码尝试访问相同的环境变量时,它返回 NULL。我使用 System.getenv。
另一方面,如果我列出 Java 中现有的 env 变量(循环遍历 getenv() 哈希图),我可以看到所有其他 env 变量,但看不到我在 pod 中设置的变量。就像我使用清单文件设置的环境变量具有不同的“状态”。
任何关于正在发生的事情的想法将非常感激!
简短回答,使用
docker run -d -u jetty jetty
。自述文件的安全部分解释说,
默认情况下,该映像以用户
启动,并在初始化后使用 Jetty 的root
模块将权限授予用户setuid
。位于jetty
的JETTY_BASE
目录归/var/lib/jetty
所有(uid 999,gid 999)。jetty:jetty
如果您希望图像以用户
立即启动,而不是以jetty
启动,您可以使用root
启动容器:-u jetty
$ docker run -d -u jetty jetty
更长的答案,为 ROOT 设置环境变量是行不通的。您需要确保它们是为用户设置的
jetty
。只需以该用户身份运行容器即可确保您的环境变量按预期设置。