我收到错误无法在本地找到 docker 图像;但是我可以 运行 使用 docker 运行 命令的图像
I get error Unable to find docker image locally; However I can run the image using docker run command
我构建了 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))
行触发错误。
备注:
- 我可以 运行 在本地 docker 图片没有任何问题
docker images
命令包含我正在尝试处理的图像列表。
- 我的容器可见性在 https://console.cloud.google.com/gcr/settings 上是私有的,我打算保持这种状态。 (我可以 运行 生成代码时 public -- 我仍然得到 'unable to find image locally warning',但它从 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="
}
用于对来自您的 GCE 实例的 API 调用进行身份验证的服务帐户似乎没有访问 Container Registry 的适当权限。我会说这是由您设置为环境变量的 my-secret-key.json
代表的服务帐户。
您可能需要为该服务帐户添加适当的权限,特别是 roles/storage.objectViewer
角色(请参阅文档 here 了解更多详细信息),以便它可以拉取图像。
问题是创建的 VM 集群实例中没有 .docker/config.json 文件。因此 docker 映像无法被 VM 拉取,从而导致错误。
解决此问题的一种方法是通过 SSH 连接到 VM 和 运行 docker-credential-gcr configure-docker
命令。这会生成 .docker/config.json
folder/file 成功地允许虚拟机拉取图像。
我构建了 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))
行触发错误。
备注:
- 我可以 运行 在本地 docker 图片没有任何问题
docker images
命令包含我正在尝试处理的图像列表。- 我的容器可见性在 https://console.cloud.google.com/gcr/settings 上是私有的,我打算保持这种状态。 (我可以 运行 生成代码时 public -- 我仍然得到 'unable to find image locally warning',但它从 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="
}
用于对来自您的 GCE 实例的 API 调用进行身份验证的服务帐户似乎没有访问 Container Registry 的适当权限。我会说这是由您设置为环境变量的 my-secret-key.json
代表的服务帐户。
您可能需要为该服务帐户添加适当的权限,特别是 roles/storage.objectViewer
角色(请参阅文档 here 了解更多详细信息),以便它可以拉取图像。
问题是创建的 VM 集群实例中没有 .docker/config.json 文件。因此 docker 映像无法被 VM 拉取,从而导致错误。
解决此问题的一种方法是通过 SSH 连接到 VM 和 运行 docker-credential-gcr configure-docker
命令。这会生成 .docker/config.json
folder/file 成功地允许虚拟机拉取图像。