常见问题
关于 Hangar
使用的依赖:
- Hangar 使用了 containers/images API 执行容器镜像拷贝和加签相关操作。
因 containers/signature API 使用了 C 库,因此在编译 Hangar 时需要启用CGO
,编译后的可执行文件存在动态链接库。 - Hangar 使用了 aquasecurity/trivy API 执行容器镜像漏洞扫描相关操作。
- Hangar 使用 Helm API 用于在 Helm Chart 中生成镜像列表。
- Hangar 使用 cobra 处理命令行交互,生成 命令行补全脚本。
Hangar 缓存文件夹
在执行 Save / Sync / Load 命令时,Hangar 使用 ${HOME}/.cache/hangar
暂存下载的容器镜像 Blobs 文件。
在执行容器镜像扫描时,Hangar 使用 ${HOME}/.cache/trivy
目录保存 Trivy 数据库文件。
如果您在执行镜像拷贝的过程中强行停止了 Hangar,请手动清理 ${HOME}/.cache/hangar
目录下的文件。
Harbor 2.X 镜像仓库
若目标镜像仓库为 Harbor,Hangar load
命令将尝试自动为目 标镜像仓库创建私有的 Harbor Project。
若 Hangar 无法自动创建 Harbor Project,请手动创建。
为什么使用 zip
压缩包格式?
关于压缩文件的更多信息,请参考 load 和 压缩文件格式 页面。
旧版本的 Hangar 创建的压缩包格式(tar.gz
)将无法与新版本(zip
)格式相兼容。
Hangar 拷贝过的镜像 Digest 会被改变么?
自 Hangar v1.7.0
起,Hangar 会尽可能的确保拷贝容器镜像时,不改变其 Digest。
只有在待拷贝的镜像格式是已弃用的 Docker manifest Version2 Schema1(application/vnd.docker.distribution.manifest.v1+json
)时,Hangar 会在拷贝镜像时将其 mediaType
更新为 Docker manifest Version2 Schema2 (application/vnd.docker.distribution.manifest.v2+json
),此时拷贝后的镜像 Digest 会与源镜像不一致。
常见报错及处理方法
报错:manifest unknown
待拷贝的镜像不存在。请使用 hangar inspect --raw docker://<IMAGE>
检查镜像是否存在。
报错:unsupported MIME type
容器镜像的 mediaType
不被支持。
Hangar 支持以下格式的 mediaType
:
application/vnd.docker.distribution.manifest.list.v2+json
application/vnd.docker.distribution.manifest.v2+json
application/vnd.docker.distribution.manifest.v1+json
application/vnd.oci.image.manifest.v1+json
application/vnd.oci.image.index.v1+json
报错:open /etc/containers/policy.json: no such file or directory
Policy 配置文件 /etc/containers/policy.json
不存在。可在 default-policy.json 获取默认的 Policy 策略配置文件。
除此之外可使用 --insecure-policy
参数跳过 Policy 检测。
警告:no avaiable image for specified arch and os
待拷贝的镜像与 --arch
和 --os
参数指定的架构 & OS 信息不符时会出现此警告信息。
例如待拷贝的镜像仅支持 amd64
架构,而 --arch
设定的是 arm64
时,会出现此 Warning 信息。
此警告信息不会影响正常的镜像拷贝流程,当出现此警告时只用于提醒该镜像没有被拷贝。
在向 Harbor 仓库拷贝镜像时遇到报错:authentication required
请检查镜像的 Harbor Project 是否已经创建,在执行 hangar mirror
命令时需要手动创建 Harbor Project。
在向 Harbor 仓库拷贝镜像时遇到报错:unknown: http status code: 404, body: {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"...
请参阅此 Issue,手动执行 Harbor 的 Garbage Collection,尝试修复此问题。
报错:server gave HTTP response to HTTPS client
若镜像仓库使用自签名 HTTPS 证书或 HTTP,请添加 --tls-verify=false
参数。
报错:writing sigstore attachments is disabled by configuration
您需要指定 registries 配置文件 的 use-sigstore-attachments
为 true
,以允 许 Hangar 上传容器镜像的 Sigstore 签名。