You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Minio存储镜像的Docker Registry执行docker pull时出现manifest unknown错误求助

使用Minio存储镜像的Docker Registry执行docker pull时出现manifest unknown错误求助

你好呀!我看你已经搭好了用Minio做存储后端的Docker Registry,启动命令也配置妥当,还上传了镜像,但执行docker pull时碰到manifest unknown的问题对吧?我来帮你梳理几个实用的排查方向:

1. 先确认镜像manifest是否真的存在于Registry中

你可以通过Registry的API直接验证镜像的manifest是否存在,执行下面的命令(记得替换成你的实际地址、镜像名和tag):

curl -X GET http://你的Registry地址:1080/v2/你的镜像名/manifests/你的镜像标签

如果返回404,那说明镜像要么没上传成功,要么上传的路径不对;如果能正常返回JSON格式的manifest内容,那问题大概率出在pull的环节或者客户端配置上。

2. 检查镜像上传的命令是否正确

上传镜像时必须给本地镜像打上指向你的Registry的tag,命令格式得是这样:

# 先给本地镜像打对应Registry的tag
docker tag 本地镜像名:标签 你的Registry地址:1080/镜像名:标签
# 再执行push
docker push 你的Registry地址:1080/镜像名:标签

要是你直接push了没改tag的本地镜像,Registry里的镜像路径会和你pull时找的对不上,自然就找不到manifest了。

3. 排查Minio存储的配置和数据情况

  • 先登录Minio的控制台,看看registry这个bucket里有没有对应镜像的文件,正常来说manifest文件的路径应该是/v2/你的镜像名/manifests/你的标签,如果Minio里根本没有这个文件,说明上传时Registry没把数据写到Minio里。
  • 再核对下config.yml里的Minio配置:accesskey和secretkey是不是和Minio的一致?regionendpoint的地址能不能正常访问?secure: false是不是和Minio的访问协议匹配(你用的是http,这个配置是对的)?
  • 另外你启动Registry的时候挂载了/data/pass/registry:/var/lib/registry,但因为你配置了S3存储,Registry应该优先用Minio而不是本地存储,这个挂载其实多余,甚至可能导致混淆,建议先去掉这个挂载参数,重启Registry再试试。

4. 检查pull命令的正确性

执行pull的时候,一定要带上你的Registry地址和正确的tag,命令格式是:

docker pull 你的Registry地址:1080/镜像名:标签

要是漏了Registry地址,Docker会默认去Docker Hub拉取,自然找不到你私有Registry里的镜像,就会报manifest错误。

5. 查看Registry日志找细节

最后可以看看Registry容器的日志,里面会有更详细的错误信息,比如上传时的存储写入失败、Minio连接问题等:

docker logs registry

这些日志能帮你精准定位到底是存储端的问题,还是Registry服务本身的问题。

备注:内容来源于stack exchange,提问作者HuaJFrame

火山引擎 最新活动