【问题标题】:I get error Unable to find docker image locally; However I can run the image using docker run command我收到错误无法在本地找到 docker 映像;但是我可以使用 docker run 命令运行图像
【发布时间】:2019-12-19 03:29:48
【问题描述】:

我构建了 docker 镜像,标记它并使用以下命令推送它

docker build -t myimage:version1 .
docker tag myimage:version1 gcr.io/my_test_project/myimage:version1
docker push gcr.io/my_test_project/myimage:version1

我一直遵循以下步骤:https://cloudyr.github.io/googleComputeEngineR/articles/massive-parallel.html

我的 my_test.R 文件如下:

rm(list=ls())
project <- "my_test_project"
zone <- "us-central1-a"
account_key <-"~/my-secret-key.json"

Sys.setenv(GCE_AUTH_FILE = account_key,
           GCE_DEFAULT_PROJECT_ID = project,
           GCE_DEFAULT_ZONE = zone)

library("googleComputeEngineR")
library("future")
library("future.apply")
library("parallel")

gce_global_project(project)
gce_global_zone(zone)

my_docker <- gce_tag_container(container_name="myimage:version1")

vm_base_name <- "vm-base-00"
cluster_size = 3
vm_names <- paste0(vm_base_name, seq(1,cluster_size))

vms <- gce_vm_cluster(vm_prefix=vm_base_name,
                      cluster_size=cluster_size,
                      docker_image = my_docker,
                      ssh_args = list(username="test_user",
                      key.pub="/home/test_user/.ssh/google_compute_engine.pub", 
                      key.private="/home/test_user/.ssh/google_compute_engine"),
                      predefined_type = "n1-highmem-2")

plan(strategy="cluster", workers = as.cluster(vms, docker_image=my_docker))

gce_vm_stop(vms)
gce_vm_delete(vms)

我收到以下错误:

Unable to find image 'gcr.io/my_test_project/myimage:version1' locally
/usr/bin/docker: Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication.
See '/usr/bin/docker run --help'.

我确实调试了代码: plan(strategy="cluster", workers = as.cluster(vms, docker_image=my_docker)) 行会触发错误。

注意事项:

  1. 我可以毫无问题地在本地运行 docker 映像
  2. docker images 命令包含我正在尝试处理的图像列表。
  3. 我的容器可见性在https://console.cloud.google.com/gcr/settings 上是私有的,我打算保持这种状态。 (我可以在公开代码时运行代码——我仍然会收到“无法在本地找到图像警告”,但它会从 gcloud 中提取图像)

附加说明: 命令gsutil iam get gs://artifacts.my_test_project.appspot.com/ 给出以下内容

{
  "bindings": [
    {
      "members": [
        "user:test_user@example.com"
      ],
      "role": "roles/storage.legacyBucketOwner"
    },
    {
      "members": [
        "user:test_user@example.com"
      ],
      "role": "roles/storage.legacyBucketReader"
    },
    {
      "members": [
        "user:test_user@example.com"
      ],
      "role": "roles/storage.legacyObjectReader"
    },
    {
      "members": [
        "user:test_user@example.com"
      ],
      "role": "roles/storage.objectViewer"
    }
  ],
  "etag": "CBQ="
}

【问题讨论】:

  • 只是为了确保您是否通过将 future 包作为 Dockerfile 的一部分将其安装到映像中?
  • 是的,包括在内

标签: r docker google-cloud-platform gcloud docker-image


【解决方案1】:

用于对来自您的 GCE 实例的 API 调用进行身份验证的服务帐号似乎没有适当的权限来访问 Container Registry。我会说这是您设置为环境变量的my-secret-key.json 所代表的服务帐户。

您可能希望为该服务帐户添加适当的权限,特别是 roles/storage.objectViewer 角色(有关更多详细信息,请参阅文档 here),以便它可以提取图像。

【讨论】:

  • 谢谢!我重新配置了权限并重新启动了会话。
  • 我在“附加说明”下添加了我目前拥有的权限。仍然出现同样的错误。
【解决方案2】:

问题是创建的 VM 集群实例中没有 .docker/config.json 文件。因此,VM 无法拉取 docker 映像,从而导致错误。 解决此问题的一种方法是通过 SSH 连接到 VM 并运行 docker-credential-gcr configure-docker 命令。这会成功生成 .docker/config.json 文件夹/文件,从而允许 VM 拉取映像。

【讨论】:

    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多