Docker BuildKit 的 --secret 机制是官方唯一推荐的构建阶段安全消费密钥方式,通过内存挂载 /run/secrets/ 实现临时可见、进程退出即销毁,不写入镜像层、不暴露于日志或 history。

用 Docker BuildKit 的 `--secret` 机制,是在构建阶段安全消费私密密钥的唯一官方推荐方式。它不把密钥写进镜像,也不出现在构建日志或历史里,只在指定 `RUN` 命令运行时,以内存文件形式挂载(路径固定为 `/run/secrets/ 从 Docker 20.10 起默认支持,但需显式开启: 密钥必须存为本地普通文件(不能是环境变量或硬编码),权限严格设为 不能用 执行构建命令,把本地文件映射到 secret ID:确保 BuildKit 已启用
export DOCKER_BUILDKIT=1
DOCKER_BUILDKIT=1 docker build ...
docker build --help,若看到 --secret 选项即已就绪准备本地凭据文件
600:
~/.ssh/id_rsa_github
~/.netrc,内容格式为:machine pypi.example.com login myuser password mypass
chmod 600 ~/.ssh/id_rsa_github,否则挂载会失败在 Dockerfile 中挂载并使用
COPY、ARG 或 ENV,必须用 RUN --mount=type=secret 显式挂载:
/run/secrets/,不可自定义RUN 都得单独挂载,不能跨指令复用RUN --mount=type=secret,id=ssh_key,dst=/tmp/id_rsa,mode=0600 \ mkdir -p /root/.ssh && \ cp /tmp/id_rsa /root/.ssh/id_rsa && \ chmod 600 /root/.ssh/id_rsa && \ ssh-keyscan github.com >> /root/.ssh/known_hosts && \ git clone git@github.com:org/repo.git /app
构建时绑定密钥文件
docker buildx build \ --secret id=ssh_key,src=$HOME/.ssh/id_rsa_github \ -t myapp:latest .
• docker history myapp:latest 不应出现密钥相关操作
• docker run --rm myapp:latest ls /run/secrets/ 应报错 “No such file or directory”











