Docker - 如何隐藏构建参数

3

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

到目前为止,当尝试从GitLab或GitHub存储库获取软件包时,我已经通过获取令牌,将令牌放置在某些环境变量中,并通过--build-arg参数传递给docker build ,然后再传递给git clone 命令来进行操作。

然而,当我开始将我的镜像推送到Docker Hub时,我有点震惊地发现,在“映像层细节”部分中,它还显示了传递给docker build的环境变量,也就是我的安全令牌内容。现在,这并不太麻烦,因为我可以每次推送时撤销它们并创建新的令牌,但这似乎相当麻烦。

有没有一种好的方式可以将安全令牌传递给docker build,以使它们不会在任何公开的地方显示出来?


3
您是否正在寻找Docker Build secrets - Marco Luzzara
你能否在主机上克隆存储库(甚至检查其中的Dockerfile),而不是在Dockerfile中运行“git clone”?这样可以避免这个问题,也可以让你构建一个非默认分支,甚至是你还没有检查过的代码。 - David Maze
1个回答

3

首先我想提到,如果是文件,复制秘密或使用ARG(使用docker build --arg)始终会可见(通过检查层或使用docker history <image-id>检查镜像),因此这些选项不可行。

Docker现在支持BuildKit,使您能够在构建时挂载机密。一种方法是在Dockerfile中添加以下语句:

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> 中可用,但您也可以自己指定目标位置(请检查链接)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接