谷歌云计算引擎上的Docker容器 - 验证以挂载存储桶

3
我一直在使用谷歌的机器学习平台——CloudML。总体来说,我正在尝试找出最简洁的方法,在Google计算实例上运行他们的Docker环境,并访问CloudML API和我的存储桶。从本地开始,我已经配置好了我的服务帐户。要实现这个目标,请参考此链接
C:\Program Files (x86)\Google\Cloud SDK>gcloud config list
Your active configuration is: [service]

[compute]
region = us-central1
zone = us-central1-a
[core]
account = 773889352370-compute@developer.gserviceaccount.com
disable_usage_reporting = False
project = api-project-773889352370

我使用Google容器镜像系列启动了一个计算实例。

gcloud compute instances create gci --image-family gci-stable --image-project google-containers --scopes 773889352370-compute@developer.gserviceaccount.com="https://www.googleapis.com/auth/cloud-platform"

编辑:需要明确设置范围以与CloudML通信。

然后我可以通过ssh登录到该实例(进行调试)。

gcloud compute ssh benweinstein2010@gci 

在计算实例上,我可以从GCR获取cloudML docker并运行它。

docker pull gcr.io/cloud-datalab/datalab:local
docker run -it --rm  -p "127.0.0.1:8080:8080" \
  --entrypoint=/bin/bash \
  gcr.io/cloud-datalab/datalab:local

我可以确认我已经可以访问我想要的存储桶。没有凭据问题。
root@cd6cc28a1c8a:/# gsutil ls gs://api-project-773889352370-ml
gs://api-project-773889352370-ml/Ben/
gs://api-project-773889352370-ml/Cameras/
gs://api-project-773889352370-ml/MeerkatReader/
gs://api-project-773889352370-ml/Prediction/
gs://api-project-773889352370-ml/TrainingData/
gs://api-project-773889352370-ml/cloudmldist/

但是当我尝试挂载存储桶时

root@139e775fcf6b:~# gcsfuse api-project-773889352370-ml /mnt/gcs-bucket
Using mount point: /mnt/gcs-bucket
Opening GCS connection...
Opening bucket...
Mounting file system...
daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1

stderr:
fusermount: failed to open /dev/fuse: Operation not permitted

我认为我需要在docker容器内激活我的服务账户?我之前遇到过类似的问题(未解决)。

gcloud auth activate-service-account

我可以向 Docker 提供一个凭证 .json 文件,但我不确定 gcloud ssh 是否将这些文件传递给我的实例?我更广泛地访问云平台,例如,我可以向 cloudML API 发布请求。
gcloud beta ml predict --model ${MODEL_NAME} --json-instances images/request.json > images/${outfile}

操作已成功。因此,一些凭据正在传递。我想我可以将其传递给计算引擎,然后从计算引擎传递到Docker实例?这感觉像是没有按照预期使用工具。我认为gcloud应该在本地身份验证后处理这个问题。


编辑:添加明确的范围可以解决第二个问题(连接到CloudML),但无法在Docker容器内挂载存储桶。 - bw4sz
2
这很可能是fuse、GCI和Docker的问题。您是在Docker容器内还是主机VM上尝试运行gcifuse?一个问题可能是您没有以特权模式启动容器。尝试在docker命令中添加--privileged标志。我还建议重新构思问题,重点关注fuse和GCI问题。这将有助于吸引正确的专家注意。 - Jeremy Lewi
1个回答

1
这是一个Docker问题,而不是Gcloud权限问题。需要以 --privileged 权限运行Docker,以允许fuse挂载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接