我正在尝试使用私有注册表(Artifactory)在Kubernetes集群(1.9.7-gke.6
)上运行容器。
Failed to pull image "myrepo.myartifactory.mycompany.com/org/image:latest": rpc error: code = Unknown desc = Error: Status 400 trying to pull repository org/image: "{
\"errors\" :[ {
\"status\" : 400,
\"message\" : \"Unsupported docker v1 repository request for 'myrepo'\"\n } ]
}"
我认为这意味着docker
客户端尝试执行v1
注册表请求,我们的Artifactory安装似乎不支持该请求。
我检查了集群节点的docker版本:
$ kubectl describe nodes | grep docker
Container Runtime Version: docker://17.3.2
Container Runtime Version: docker://17.3.2
Container Runtime Version: docker://17.3.2
我找到了Docker标志--disable-legacy-registry=true
,但是我不确定如何以这种方式最好地配置我的GKE集群。
答案 0 :(得分:2)
幸运的是,您可以通过SSH进入GKE节点(不能与GKE主节点连接)。因此,您可以在所有节点的/etc/docker/daemon.json
文件中添加此标志。像这样:
{
...
"disable-legacy-registry": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "1g",
"max-file": "3"
}
...
}
然后在所有节点上重新启动docker。在每个节点中:
sudo docker systemctl restart docker
请注意,此标志已完全removed,来自Docker 17.12及更高版本。
答案 1 :(得分:1)
实际的问题是我们的注册表凭据已更改。在我们的集群上更新拉取凭据解决了该问题。
我假设在某些情况下注册表API返回错误(例如,身份验证或授权错误)时可能会发生此问题。在这种情况下,泊坞窗客户端会尝试降级到较旧的API版本-Artifactory上不可用。
这将导致Artifactory返回所提到的Unsupported docker v1 repository request for 'myrepo'
错误,但不幸的是掩盖了实际错误。