求教关于nexus3推送docker镜像没有blobs的问题

o茶漬ke
  • 4
新手上路,请多包涵

问题描述

我在一台有外网的电脑上搭建了私有nexus3并创建了docker(host)仓库,这台电脑上push和pull自己构建的镜像看上去没问题

docker push 192.168.10.10:5000/nacos:2.0.3

但是我到另外一台没有外网的电脑上pull镜像的时候,发现无法拉取镜像

PS C:\Windows\system32> docker pull 192.168.10.10:5000/nacos:2.0.3
2.0.3: Pulling from nacos
bc8517709e9c: Retrying in 1 second
fc43faa05bed: Download complete
ca59508af03b: Download complete
...
dial tcp 20.205.82.64:443: connectex: A connection attem

我去查看了一下nexus3上的manifests发现

"blobSum" : "sha256:bc8517709e9cfff223cb034ff5be8fcbfa5409de286cdac9ae1b8878ebea6b84"

是windows的基础镜像也就是Dockerfile的

FROM mcr.microsoft.com/windows/nanoserver:1809-amd64

但是在nexus的blobs里面根本没有这个数据,这个镜像根本没传到nexus3上面去,我还尝试把mcr.microsoft.com/windows/nanoserver:1809-amd64传到这个仓库中去但是blobs中依然没有sha256:bc8517709e9c这一条数据,只有一个躯壳tag标记,我该怎么操作才能把nanoserver的镜像完整上传上去?

docker push 192.168.10.10:5000/mcr.microsoft.com/windows/nanoserver:1809-amd64

问题出现的平台版本及自己尝试过哪些方法

相关代码

粘贴代码文本(请勿用截图)

你期待的结果是什么?实际看到的错误信息又是什么?

回复
阅读 892
2 个回答

试下打成这个tag上传上去
docker push 192.168.10.10:5000/windows/nanoserver:1809-amd64

o茶漬ke
  • 4
新手上路,请多包涵

终于解决了,nanoserver的官方镜像设置了mediaType为application/vnd.docker.image.rootfs.foreign.diff.tar.gzip

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 403,
      "digest": "sha256:8572826a0d1a2662620aa0f05f88ae43d515b4d909e5a3fd1c7bc77f569a974e"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.foreign.diff.tar.gzip",
         "size": 102741177,
         "digest": "sha256:bc8517709e9cfff223cb034ff5be8fcbfa5409de286cdac9ae1b8878ebea6b84",
         "urls": [ "https://mcr.microsoft.com/v2/windows/nanoserver/blobs/sha256:bc8517709e9cfff223cb034ff5be8fcbfa5409de286cdac9ae1b8878ebea6b84"
         ]
      }
   ]
}

这种设置会规定了该镜像只能从微软官方获取,目前解决办法是获取下来之后进行docker inspect "镜像"查看那个镜像的所在目录,打开descriptor.json修改里面的mediaType然后重启docker,docker就会重新读取这个配置,再去进行上传到nexus3的时候就会把这个镜像完整上传了。

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 403,
      "digest": "sha256:8572826a0d1a2662620aa0f05f88ae43d515b4d909e5a3fd1c7bc77f569a974e"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 106140202,
         "digest": "sha256:b49238677b986834638d5aa404b58283cb6799e31b2de5846a120529267e1d2e"
      }
   ]
}

不过我觉得应该有更正确的做法例如使用docker manifest create来构建的不过没看懂这个命令怎么用....以后再研究看看了

宣传栏