docker - 如何隐藏构建参数

docker - how to hide build arguments

我最近开始在我的专业项目中广泛使用 docker。我仍在掌握许多细节。

到目前为止,当我尝试从 gitlab 或 github 上的存储库获取软件包时,我采用了获取令牌、将令牌放入某个环境变量并将其传递给 docker build 通过 --build-arg 参数,然后到 git clone 命令。

然而,当我开始将图像推送到 dockerhub 时,我有点震惊地发现在“图像层详细信息”部分中,它还显示了 value[=传递给docker build的环境变量的25=],也就是我的安全令牌的内容。现在,这不是那么有问题,因为我可以在每次推送时撤销它们并创建新的,但这看起来很麻烦。

有没有一种好方法可以将安全令牌传递给 docker build,这样它们就不会公开出现在任何地方?

首先我想提一下 COPYing 秘密(如果它是一个文件)或使用 ARG(使用 docker build --arg)将始终可见(通过检查层或使用 docker history <image-id> 检查图像,因此这些选项是不可能的

Docker 现在支持 BuildKit,这使您可以在构建期间装载机密。 一种方法是在 Docker 文件中添加以下语句:

RUN --mount=type=secret,id=mysecret <some_command> 

并在构建期间使用:

export MYSECRET=bigsecret
DOCKER_BUILDKIT=1 docker build --secret id=mysecret,env=MYSECRET -t myimage:latest .

默认情况下,秘密应该在 /run/secrets/<secret_name> 可用,但您也可以自己指定目的地(检查 link)。