首页/云/Docker 容器速查/环境变量传密钥的泄露面
资源与安全50 条

环境变量传密钥的泄露面

环境变量不是密钥保管箱:docker inspect、宿主 /proc/<pid>/environ 与异常转储都可能带出全部 Env,密码与令牌优先用文件挂载或 secrets 机制。

Docker 容器速查云更新于 2026-10-13

环境变量不是保险箱

把密码与令牌放进环境变量并不是安全的保管方式:容器的环境变量可以通过检查命令完整读出,宿主上对应进程的环境文件同样能读到,异常时的内存转储与应用日志也可能带出这些值。更稳妥的做法是只读文件挂载、编排平台的密钥机制,或构建期专用的密钥通道。

基本信息

风险面检查命令输出、宿主进程环境文件、崩溃转储、日志
检测方式用检查命令输出容器的环境变量清单
缓解手段只读文件挂载、编排密钥机制、构建期密钥通道
构建期注意不要用构建参数传密钥
适用平台容器运行时与各编排平台

典型使用场景

  • 上线前排查容器环境变量里是否含敏感值
  • 把流水线中的密钥从构建参数改为专用密钥通道
  • 事故复盘时确认凭据是否通过日志或转储外泄
  • 制定密钥注入规范,统一走文件或密钥机制
  • 审计存量服务,逐步替换环境变量里的密码

检查与替代

检查与替代
docker inspect -f '{{json .Config.Env}}' web                        # 看环境变量里有什么
docker exec web sh -c 'xargs -0 -n1 < /proc/1/environ | head -20'   # 容器内进程环境
docker run -d --env-file ./app.env --name api app/api:1.4.2         # 至少改用文件注入
ls -l ./app.env                                                     # 注入文件本身也要控制权限

泄露路径与控制

泄露路径说明控制方式
检查命令输出环境变量明文可见改用文件挂载或密钥机制
宿主进程环境同宿主账号可读限制登录权限并做审计
容器内环境文件容器内进程可读敏感文件用只读挂载
日志与转储调试输出可能带出规范禁止打印敏感值
构建期与运行期的密钥通道要分开治理:构建期不要用构建参数传密钥,因为它们会留在镜像层与构建历史里。
让应用打印全部环境变量的调试做法要保持警惕,很多凭据泄露正是从这一步开始的。

易错点

  • 把密钥写进命令行参数:会进入 shell 历史与宿主进程列表,至少应改用注入文件并控制文件权限
  • 应用日志打印环境变量:泄露往往从这一步发生,需要靠代码规范与检查兜住
  • 构建与运行共用同一个密钥:一处泄露同时影响两个环节,通道要分开
  • 只看容器不看宿主:宿主上的进程环境文件同样包含这些值,权限与审计要一并收紧

数据来源与参考

  • Docker 官方文档:Build secrets 与 run secrets 相关章节(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌