在 Google Container Engine 上设置我们公司的基础设施时,我尝试将我们的 Docker 镜像放在 Google Container Registry 中。当我尝试使用 GCR 上托管的镜像启动部署时,我在 kubernetes 中的 pod 上收到以下错误。
无法拉取图像“gcr.io//portal:latest”:rpc 错误:代码 = 2 desc = 错误:状态 405 尝试拉取存储库 /portal:“v1 Registry API 已被禁用。如果您未明确使用 v1 Registry API,则可能无法找到您的 v2 图像。请验证您的图像是否可用,或重试
dockerd --disable-legacy-registry
。请参阅 https://cloud.google.com/container-registry/docs/support/deprecation-notices“同步 pod 时出错,跳过:使用 ErrImagePull 为“portal”启动“StartContainer”失败:“rpc 错误:代码 = 2 desc = 错误:状态 405 尝试拉取存储库 /portal:\”v1 Registry API 已禁用。如果您未明确使用 v1 Registry API,则可能找不到您的 v2 映像。请验证您的映像是否可用,或使用 重试
dockerd --disable-legacy-registry
。请参阅 https://cloud.google.com/container-registry/docs/support/deprecation-notices\""
我发现一些关于需要向服务帐户添加权限的参考,并且我已经尝试过,但是似乎没有任何效果,即使在我删除并重新创建环境之前环境正在运行。
我还找到了一些参考资料,以确保使用最新的 docker 版本推送容器。我使用最新下载的 Docker CE 完成了所有映像推送。
非常感谢您提出任何可能导致此错误的建议。谢谢!
答案1
所以,我发现了问题。在将项目从我的“实验”环境移至生产环境时,我将应用程序的名称从 更改为<productName>
。<productName>app
我将其隐藏在容器定义中,因此我为图像使用了错误的 URL。
我向 Google 提出了请求,希望得到更好的错误信息。
答案2
我遇到了这个问题,但似乎 Kubernetes 无法访问注册表。我需要创建一个新的服务帐户并创建一个新的secret registry
。
https://container-solutions.com/using-google-container-registry-with-kubernetes/
答案3
此命令对我有用,因为状态 405 尝试拉取存储库/门户:“v1 注册表 API 是禁用错误。
gcloud docker -- pull gcr.io//portal:latest
答案4
我已再次下载该图像,gcloud docker -- push gcr.io/example-org/example-image:latest
然后再次尝试使用或构建!