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

如何正确使用docker build --secret为构建阶段应用传递密钥?

问题根因
  • 每个RUN指令都是独立的Shell会话,上一个RUN中export的环境变量仅作用于当前会话,不会传递到后续RUN指令
  • --mount=type=secret的挂载生命周期仅限所属的RUN指令,指令执行完成后密钥文件会自动卸载,后续步骤无法访问/run/secrets/下的对应文件
解决方案

将密钥读取、环境变量导出、测试执行三个步骤合并到同一个带有secret挂载的RUN指令中即可,修改后的test阶段配置如下:

FROM development AS test
RUN --mount=type=secret,id=mysecret \
    # 同时导出大小写两个环境变量匹配应用读取逻辑
    export MYSECRET=$(cat /run/secrets/mysecret) && \
    export mysecret="$MYSECRET" && \
    coverage run --omit='src/manage.py,src/config/*,*/.venv/*,*/*__init__.py,*/tests.py,*/admin.py' src/manage.py test src && coverage report
补充说明
  • 该配置不会导致密钥泄漏:BuildKit的secret机制不会将密钥内容写入镜像层,构建完成后不会残留密钥信息
  • 如果后续有多个构建步骤需要用到该密钥,每个步骤的RUN指令都需要单独添加--mount=type=secret,id=mysecret参数,或把所有需要密钥的步骤合并到同一个RUN指令中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:48:00