Pod中配置的环境变量在Jetty中无法通过Java代码获取求助
检查Jetty启动脚本的环境变量处理逻辑
进入Pod查看Jetty的启动脚本(比如/docker-entrypoint.sh),确认脚本是否在启动Java进程前过滤、重置了环境变量。比如部分镜像会使用env -i或只保留特定前缀的变量来启动Java,导致Secret注入的变量没被传递。可以通过ps aux找到Java进程的启动命令,对比printenv和cat /proc/<Java进程ID>/environ的输出,判断Java进程是否真的没拿到这些变量。确认Pod启动命令的环境变量传递情况
如果你的Deployment/Pod清单里自定义了command或args,检查是否通过shell来启动Jetty。比如直接使用["java", ...]会继承容器环境变量,但如果启动逻辑中存在重新构造环境变量的操作,可能会丢失Secret注入的变量。排查Java安全权限限制
虽然JDK21默认关闭了SecurityManager,但如果Jetty配置了自定义安全策略(比如jetty.xml中的权限配置),可能限制了应用代码访问环境变量的权限。可以临时调整安全策略,测试是否能正常获取变量。验证环境变量名称的一致性
确认Pod清单中定义的环境变量名称,和代码中尝试获取的名称完全一致(包括大小写、下划线等特殊字符)。哪怕是大小写错误,都会导致获取失败。排除Jetty配置的环境变量覆盖
检查Web应用的web.xml或Jetty的配置文件,是否存在env-entry等配置项,虽然这不会影响System.getenv,但可以排除因配置混淆导致的排查误差。
内容的提问来源于stack exchange,提问作者Thomas

