[英]Docker: Cannot pull an image that was pushed to a private registry
我这样做:
docker pull 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 守护进程配置如下:
{
"insecure-registries" : [
"my-private-repo.xyz.com:443"
],
"experimental" : false
}
这是我的码头工人信息:
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 信息。 任何解决方案? 关于我可能做错了什么的指针?
docker 客户端版本是这样的:
13:39 $ docker --version
Docker version 1.13.0, build 49bf474
更新:
解决。 当存储库中不存在图像时,Docker 似乎会抛出模棱两可的错误消息。 当我这样做时:
docker pull my-private-repo.xyz.com:443/platform/abc
我原以为要下载带有“最新”标签的图像。 在存储库中不存在带有此标签的此类图像。 但是抛出的错误是错误的。
此外,我还按照评论中的建议更改了我的守护程序配置:
{
"experimental" : false,
"disable-legacy-registry" : true,
"insecure-registries" : [
"my-private-repo.xyz.com:443"
]
}
现在我可以拉图像了。
当您使用 Docker 客户端从注册表中拉取镜像时,客户端将首先尝试向注册表发送 V2 版本请求。 如果此请求返回错误(即图像不存在或请求未经授权),则 docker 客户端将回退并尝试发送另一个 V1 版本请求。
由于您的注册表是较新版本,并且不再支持 V1 API,因此注册表将在第二次 V1 请求尝试中抛出诸如“不支持的 docker v1 存储库请求”之类的错误。
为了避免这种情况,Docker 开发人员计划默认将--disable-legacy-registry
选项添加到 Docker 客户端。 如果此选项已设置为 true,则 Docker 客户端将不会再次尝试发送 V1 版本请求,而是会返回初始 V2 请求的原始错误消息。
有关更多信息,请查看此问题: https : //github.com/docker/docker/issues/26142#issuecomment-271867508
如果你得到这意味着你使用的 Docker 低于 1.9 版。 Docker 已弃用此版本的 v1 注册表。 请检查以下事项
docker --version
和docker info
docker run --rm --pid=host alpine ps aux | grep dockerd
上面的命令将显示您的系统中配置了多少 Docker 注册表。 如果有多个,请通过删除和配置一一检查。
因此,如果它有多个注册表设置,请检查每个注册表并检查其配置是否支持 v2。
如果您只配置了一个注册表并面临此问题,我建议将 Docker 版本升级到 1.9 以上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.