You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行时无法找到/run/secrets中的机密问题排查

问题解答

为什么docker run看不到/run/secrets?

Docker Compose的**运行时机密(run-time secrets)**是编排层提供的功能,不属于镜像本身:

  • docker compose build只负责构建镜像,不会处理compose.yml里的运行时挂载、secret这类编排配置
  • 直接用docker run启动镜像时,完全没加载Compose文件里的secret挂载规则,自然不会生成/run/secrets目录和对应机密文件

你之前把secrets嵌套在build块里能在构建阶段访问,那是Compose的构建阶段机密(build secrets),专门给镜像构建过程用的,和运行时机密是两码事。

docker compose up比docker compose build多做了哪些操作?

docker compose build仅聚焦于镜像构建,而docker compose up是完整的服务编排启动流程,额外做了这些事:

  • 自动检查服务依赖的镜像:如果镜像未构建/需要更新,会先触发docker compose build
  • 创建并管理专属Docker桥接网络(默认以项目目录名命名),让同一Compose下的服务能通过服务名互相访问
  • 根据compose.yml配置,为容器挂载运行时资源:包括secrets、configs、volumes
  • 配置容器的环境变量、端口映射、重启策略、资源限制等参数
  • 按照depends_on定义的依赖顺序启动容器
  • 监控容器运行状态,统一聚合容器日志
  • 管理服务的生命周期(比如停止、重启、扩容)

适配GCE实例模板的解决方案

GCE实例模板是直接基于Docker镜像启动容器,没法直接复用Compose的编排配置,得换GCP原生的机密管理方式:

  1. 把机密存储到GCP Secret Manager中
  2. 给GCE实例配置对应的IAM权限,让实例能访问Secret Manager
  3. 在实例的启动脚本里,拉取机密到实例本地(比如/opt/secrets/service_account_key)
  4. 启动容器时,用docker run -v /opt/secrets/service_account_key:/run/secrets/service_account_key your-image,把本地机密文件挂载到容器指定路径

注意:绝对不要把机密打包进镜像,哪怕是构建阶段临时用的,都有泄露风险。

内容的提问来源于stack exchange,提问作者Rob Lyndon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:26:05