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。 请检查以下这些事情
- 检查docker版本
docker --version
和docker info
- 检查在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。