我得到错误,无法在本地找到docker映像;但是,我可以使用docker运行命令运行图像

我得到错误,无法在本地找到docker映像;但是,我可以使用docker运行命令运行图像,r,docker,google-cloud-platform,gcloud,docker-image,R,Docker,Google Cloud Platform,Gcloud,Docker Image,我构建了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 我已从以下步骤开始: 我的My_test.R文件如下所示: rm(list=ls()) project <- "my_test

我构建了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
我已从以下步骤开始:

我的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)

我调试了代码: 行
plan(strategy=“cluster”,workers=as.cluster(vms,docker\u image=my\u docker))
触发错误

注意事项:

  • 我可以在本地运行docker映像,没有任何问题
  • docker images
    命令包含我试图处理的图像列表
  • 我的容器可见性是私有的,我打算保持这种状态。(我可以在公开代码时运行该代码——我仍然会收到“无法在本地找到图像警告”,但它会从gcloud中提取图像)
  • 附加说明: 命令
    gsutil iam get gs://artifacts.my_test\u 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="
    }
    
    

    用于验证来自GCE实例的API调用的服务帐户似乎没有访问容器注册表的适当权限。我认为这是由设置为环境变量的
    my secret key.json
    表示的服务帐户


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

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

    只是为了确保,您是否已将
    future
    包作为Dockerfile的一部分安装在映像中?是的,包括在内谢谢!我重新配置了权限并重新启动了会话。我在“附加说明”下添加了当前拥有的权限。仍然得到相同的错误。
    {
      "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="
    }