首页/云/Docker 容器速查/构建期密钥:ARG 的风险与 secret 替代
本包目录(366 条)
基础命令50 条
镜像与构建107 条
网络与存储52 条Compose 编排55 条资源与安全50 条容器排障52 条

构建期密钥:ARG 的风险与 secret 替代

用 ARG/ENV 携带 token 会进入构建历史与层缓存,存在泄漏风险;BuildKit 的 --secret 只在挂载点临时可见,不进层。

Docker 容器速查云更新于 2026-10-12
风险点构建历史可见、层内残留、缓存复用带走
替代方案RUN --mount=type=secret,id=xxx
配套docker build --secret id=xxx,src=./token 或环境变量

示例

示例
# 不推荐:token 会留在构建历史
ARG NPM_TOKEN
RUN echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > /root/.npmrc

# 推荐:临时挂载 secret,用完即消失
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci --omit=dev
secret 方案需要 BuildKit;构建命令加 --secret id=npmrc,src=./npmrc 提供文件内容。

易错点

  • 换了 secret 后 CI 的 docker build 命令也要带上 --secret,否则挂载点为空导致拉包失败
  • 确认最终镜像里没有把密钥写进产物文件:解压/检查镜像层再发布

数据来源与参考

  • Docker 官方文档:Build secrets(docs.docker.com/build/building/secrets)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌