1Panel icon indicating copy to clipboard operation
1Panel copied to clipboard

[BUG]拉取 Docker 镜像时的镜像名校验应支持 digest 格式

Open WankkoRee opened this issue 1 year ago • 2 comments

联系方式

No response

1Panel 版本

v1.10.11-lts

问题描述

当前检测应该是单纯判定字符和长度,这样的话虽然能快速完成需求,但是实际上并不严谨,比如说 digest 格式的就不支持。

image

重现步骤

ghcr.io/heiher/hev-socks5-tunnel@sha256:20ee3ad45fde6253b9b090000eb2c51131133199b45686b8ddaa9e6cddc4b5aa

期待的正确结果

期望能改进为正则匹配的实现,避免因域名长度、其他小众格式等原因造成的人为限制。

我按照官方的定义( https://docs.docker.com/reference/cli/docker/image/tag/ )尝试写了一个:

^(?:(?:[a-zA-Z0-9-]+?\.)*[a-zA-Z0-9-]+?(?::[0-9]{1,5})?/)?(?:[a-zA-Z0-9-]+?/)*[a-zA-Z0-9-]+?(?::[a-zA-Z0-9_.-]{1,128}|@sha256:[0-9a-f]{64})?$

主要分为三个部分:

(?:(?:[a-zA-Z0-9-]+?\.)*[a-zA-Z0-9-]+?(?::[0-9]{1,5})?/)? // 可选的 host 部分,其中的 port也是可选部分
(?:[a-zA-Z0-9-]+?/)*[a-zA-Z0-9-]+? // 镜像名部分,因为官方说实际上不一定只有NAMESPACE/REPOSITORY这样的两级,所以对于路径分级不做限制
(?::[a-zA-Z0-9_.-]{1,128}|@sha256:[0-9a-f]{64})? // 镜像版本部分,支持 tag 格式和 digest 格式

当然,上面对于 host、port、path、tag 的格式都没有做细致限制,比如说大部分名字都不能以-开头,端口应该在65535内等,如果完善这些限制的话,表达式会过于复杂。

相关日志输出

No response

附加信息

No response

WankkoRee avatar Jul 10 '24 05:07 WankkoRee

虽然换成正则其实也相当于是换成了另一个人为限制,最终还是会受限于开发者对于名称合法性的认知。

WankkoRee avatar Jul 10 '24 05:07 WankkoRee

感谢反馈,上述功能会在后续版本优化。

wanghe-fit2cloud avatar Jul 10 '24 05:07 wanghe-fit2cloud

这里取消了 @ 字符并且增加长度限制,交给 docker 自己进行校验,后端 docker 拉镜像的时候会默认先对格式进行校验

ssongliu avatar Aug 15 '24 10:08 ssongliu

v1.10.14-lts 版本已发布。

wanghe-fit2cloud avatar Aug 29 '24 06:08 wanghe-fit2cloud