Docker 信任:如何在不将图像推送到存储库的情况下对图像进行签名

Docker trust: how to sign image without pushing it to repository

我们 运行 私人 docker 注册表,我正在尝试使用公证人来添加图像签名。我已经设置了公证人,并且 Docker 客户端可以在推送到注册表时对图像进行签名。

我的问题是我们推送的注册表名称与我们从中提取的注册表名称不同。我们使用 Nexus 来托管我们的 docker 图像,这是 运行ning 私有注册表的 Nexus 方式的产物。

我们推送到 docker-registry-publish.example.com 并从 docker-注册表.example.com
我们无法推送到 docker-注册表。example.com

我找不到让 docker 或公证人在不先推送图像的情况下对图像进行签名的方法。我希望能够做的是这样的:

docker push docker-registry-publish.example.com/team1/app1:1.0
docker tag docker-registry-publish.example.com/team1/app1:1.00 docker-registry.example.com/team1/app1:1.0
$some_way_to_sign docker-registry.example.com/team1/app1:1.0

没有'docker sign'命令,docker签名图像的唯一方法是推送它,据我所知知道。 “notary sign”需要一个文件,我不知道如何给它提供 docker 图片。
有没有办法让 docker 或公证人只做签名?

谢谢!

这些是我要执行的步骤。

首先,使用docker trust key generate生成密钥并将其命名为${key}

然后,加载密钥并为图像添加签名者

docker trust key load --name ${key} ${key}.pub
docker trust signer add --key ${key}.pub ${key} docker-registry-publish.example.com/team1/app1:1.0

接下来,构建图像:

docker build --disable-content-trust=true -t docker-registry-publish.example.com/team1/app1:1.0 .

然后,在图像上签名:

docker trust sign docker-registry-publish.example.com/team1/app1:1.0

验证密钥和签名:

docker trust inspect --pretty docker-registry-publish.example.com/team1/app1:1.0

最后,推送它:

docker push docker-registry-publish.example.com/team1/app1:1.0