我试图从DTR拉取一个docker镜像,但是我遇到了以下错误
#docker pull repo/appname
Trying to pull repository repo/appname ...
Pulling repository repo/appname
**invalid character '<' looking for beginning of value**
我不确定出了什么问题。我刚才谷歌搜索发现以下链接与错误有关,但没有帮助。
我试图从DTR拉取一个docker镜像,但是我遇到了以下错误
#docker pull repo/appname
Trying to pull repository repo/appname ...
Pulling repository repo/appname
**invalid character '<' looking for beginning of value**
我不确定出了什么问题。我刚才谷歌搜索发现以下链接与错误有关,但没有帮助。
之前的回答指出可能是网络问题。
对于访问DTR (Docker Trusted Registry)的情况,这也可能是权限问题。
例如,如果需要进行docker login
才能访问该镜像,则会返回一个404 HTML页面,而docker命令将无法解析以<!DOCTYPE html>
开头的HTML响应,因此会出现无效字符'<
')
实际上,BMitch在评论中有帮助地指出,DTR将会发送一个JSON消息,而不是HTML:
这个
<
来自请求到达注册表API之前的其他拦截器。某些东西捕获了请求,在到达注册表API之前。网络代理或容器内的反向代理。
无论哪种方式,docker login
都不应该有所帮助。我会用curl命令访问注册表的URL/端口,看看是什么导致了错误。
docker login
都不会有帮助。我建议使用curl命令访问注册表的URL和端口,查看生成错误的原因。 - BMitch我的情况是因为在DTR中缺少图像。我不知道我们组织中有多个几乎相似(除了一些字符)的DTR。所以图像被推送到ABC DTR,但拉取操作正在查找XYZ DTR。因此我得到了上述错误信息。我现在能够成功地从正确的DTR中拉取图像。
我遇到了类似的问题,使用docker pull <image>
命令时,但错误信息更加详细:
ERROR: error parsing HTTP 400 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>400 The SSL certificate error</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>The SSL certificate error</center>\r\n<hr><center>openresty</center>\r\n</body>\r\n</html>\r\n"
我发现证书已经过期了 (/etc/docker/certs.d/<docker hostname>
)1,所以我需要从 machine_public.pem
更新 client.cert
,并从 machine_private.pem
更新 client.key
(使用命令 cp <dir>/machine_(public|private).pem <dir>/client.(cert|key)
... 每个命令分别执行)。
我的问题是 Docker Desktop 版本过旧。更新后问题得到了解决。在加载 Docker Desktop 时,我也看到了一个“失败”的消息。