我有一个 Docker 镜像推送到 Google Container Registry gcr.io/my-project/my-image:latest
。在同一个项目中,我创建了一个基于 COS(Container-Optimized OS)的 Google Compute Engine 实例,并赋予了对 Google Storage 的读取权限(默认启用)。我还向其服务帐户授予了对 Google Storage 的读取权限。
但是,我无法从 GCE 实例中提取图像:
$docker pull gcr.io/my-project/my-image:latest
Error response from daemon: repository gcr.io/my-project/my-image not found: does not exist or no pull access
这医生说:
要从 Compute Engine 实例中提取私有 Docker 映像,请确保您的实例具有对映像存储桶的读取权限。如果您的实例和映像存储桶位于同一个 Google Cloud Platform 项目中,则默认情况下会正确配置此项。
答案1
此命令会自动将 Docker 客户端记录到 GCR 中:
docker-credential-gcr configure-docker
答案2
为了从 Google Cloud Registry 中提取图像,您需要使用相关gcloud
命令。
请注意,如果您使用标准 Docker 命令行工具,则必须手动设置授权,因为它不知道 Google 权限或什么是服务帐户。
gcloud docker -- pull gcr.io/my-project/my-image
您可以查看相关文档这里。
如果您的应用程序无法使用gcloud
命令行工具向 Google Container Registry 进行身份验证,您可以docker login
直接使用 进行身份验证。这允许将第三方持续集成解决方案和集群管理技术与 Container Registry 结合使用。您可以查看更多信息这里。
答案3
如果您想要将镜像推送到 Container-Optimized OS,您只需在创建 COS 实例时选中 [将容器镜像部署到此 VM 实例],并将注册表镜像的路径 {gcr.io/my-project/my-image} 放在显示的字段中。您可以找到更多信息这里