Docker:无法拉出推送到私人registry的图像

我这样做:

docker拉my-private-repo.xyz.com:443/platform/abc

我得到以下错误:

Pulling repository my-private-repo.xyz.com:443/platform/abc Error: Status 400 trying to pull repository platform/abc: "{\n \"errors\" : [ {\n \"status\" : 400,\n \"message\" : \"Unsupported docker v1 repository request for 'my-private-repo'\"\n } ]\n}" 

我的docker守护进程被configuration为:

 { "insecure-registries" : [ "my-private-repo.xyz.com:443" ], "experimental" : false } 

这是我的docker信息:

 Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 15 Server Version: 1.13.0 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 22 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 4.9.4-moby Operating System: Alpine Linux v3.5 OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 1.952 GiB Name: moby ID: WW55:6DVS:DJCJ:3NXI:2CDX:44JW:F6IK:P2JU:LM7X:B76Y:HC3G:RCEU Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 16 Goroutines: 27 System Time: 2017-01-24T21:30:22.279581628Z EventsListeners: 1 No Proxy: *.local, 169.254/16 Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: my-private-repo.xyz.com:443 127.0.0.0/8 Live Restore Enabled: false 

上面添加了docker信息。 任何解决scheme 关于我可能做错什么的指针?

docker客户端版本是这样的:

 13:39 $ docker --version Docker version 1.13.0, build 49bf474 

更新:

解决。 看起来像Docker是抛出不明确的错误消息,当图像不存在于存储库。 当我这样做时:

 docker pull my-private-repo.xyz.com:443/platform/abc 

我期待用最新的标签下载图片。 在存储库中,这个标签不存在这样的图像。 但是抛出的错误是错误的。

此外,我也改变了我的守护进程configurationbuild议在这个意见:

 { "experimental" : false, "disable-legacy-registry" : true, "insecure-registries" : [ "my-private-repo.xyz.com:443" ] } 

而现在我能够拉动形象。

当你使用Docker客户端从registry中提取图片时,客户端将首先尝试向registry发送V2版本请求。 如果此请求返回错误(即图像不存在或请求未经授权),则docker客户端将回退并尝试发送另一个V1版本请求。

由于您的registry是新版本,并且不再支持V1 API,因此registry会在第二个V1请求尝试中抛出错误,如“不支持的docker v1存储库请求”。

为了避免这种情况,Docker开发人员计划默认将--disable-legacy-registry选项添加到Docker客户端。 如果这个选项被设置为true,Docker客户端不会再尝试发送V1版本的请求,但会返回最初的V2请求的原始错误信息。

欲了解更多信息,请查看这个问题: https : //github.com/docker/docker/issues/26142#issuecomment-271867508

如果你得到这个意味着你使用的是less于1.9的Docker。 Docker已经弃用了这个版本的v1registry。 请检查以下这些事情

  1. 检查docker版本docker --versiondocker info
  2. 检查在docker上注册的registry,如果您在Docker中configuration了多个registry,那么您需要检查registryconfiguration了哪个registry。

docker运行–rm –pid =主机阿尔派ps aux | grep dockerd

以上命令将显示您的系统中configuration了多less个Dockerregistry。 如果有多个,请通过逐个删除和configuration进行检查。

所以如果它有多个registry设置,请检查每个registry,并检查configuration是否支持v2。

如果您只configuration了一个registry并面临这个问题,我build议升级Docker版本大于1.9。