首页 > 解决方案 > 无法导入 ctr-enc 加密的图像

问题描述

我正在尝试使用教程加密 docker 图像。我有存储在 Azure 容器注册表中的图像,我想加密它们。

由于 ctr-enc 环境不支持来自 Azure CR 的图像,因此我从 Azure CR 中提取图像,将其标记到本地注册表(sudo docker tag "azure-cr-image-name" localhost:5000/test:0.1)并推送它(sudo docker push localhost:5000/test:0.1),然后从本地注册表中将其拉入 ctr-enc。

所有步骤都可以正常工作。图像运行成功,因此我将其导出到 tar 文件。当我尝试在任何其他设备中导入 tar 文件时出现错误。错误如下

unpacking localhost:5000/test:0.1 (sha256:7b60c337c1d319c682369508673f8da65ce027cd95917d80abec71c753f90341)...INFO[0119] apply failure, attempting cleanup             error="failed to extract layer sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982: mount callback failed on /var/lib/containerd/tmpmounts/containerd-mount138280154: archive/tar: invalid tar header: unknown" key="extract-395814385-sMwu sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982"
ctr: failed to extract layer sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982: mount callback failed on /var/lib/containerd/tmpmounts/containerd-mount138280154: archive/tar: invalid tar header: unknown

我只想知道这个流程是否有效,我是否遗漏了什么或者整个流程是错误的。我对此不太了解,因此将不胜感激。

标签: dockerazure-container-registry

解决方案


我在以下步骤的帮助下解决了错误。尝试重新创建流程,我使用链接设置我的本地存储库。从 acr 拉取镜像,加密后推送到本地注册中心,然后开始从本地注册中心拉取加密镜像到其他设备

我在设备中收到以下错误

unpacking linux/arm64/v8 sha256:cfd940f7d5d6a6817e8d4f4a811a27263fa11dc00507ebf638ff24be703e5320...
INFO[0293] apply failure, attempting cleanup             error="failed to extract layer sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982: call to DecryptLayer failed: missing private key needed for decryption\n: unknown" key="extract-20510027-zCdy sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982"
ctr: failed to extract layer sha256:0447c1aa276497ad5424dd1f8597b7f667126d868489277bab7aea547a4aa982: call to DecryptLayer failed: missing private key needed for decryption
: unknown

在拉取命令本身中提供密钥后,图像被下载并且运行没有任何错误。拉取命令示例:sudo ctr-enc images pull --plain-http=true --key mykey.pem registry.local.com:5000/encrypted-image/test:0.1

要点: 1] 在要设置存储库的设备以及要在其中运行加密映像的设备的 hosts 文件中添加以下行。将其替换为您的实际 IP

Ex:- 192.168.0.1  repository.local.com

2] 在 /docker/daemon.json 文件中为您计划运行加密映像的设备添加以下行

 "insecure-registries":["registry.local.com:5000"]

推荐阅读