计算引擎上google cloudML的Docker容器-安装桶的身份验证

计算引擎上google cloudML的Docker容器-安装桶的身份验证,docker,google-compute-engine,gcloud,google-cloud-ml,google-container-os,Docker,Google Compute Engine,Gcloud,Google Cloud Ml,Google Container Os,我一直在使用谷歌的机器学习平台,cloudML 大局: 我正试图找出最干净的方法,让他们的docker在google计算实例上运行,访问cloudML API和我的存储桶 从本地开始,我已配置我的服务帐户 C:\Program Files (x86)\Google\Cloud SDK>gcloud config list Your active configuration is: [service] [compute] region = us-central1 zone = us-cen

我一直在使用谷歌的机器学习平台,
cloudML

大局: 我正试图找出最干净的方法,让他们的docker在google计算实例上运行,访问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连接到该实例中(用于调试)

在compute实例上,我可以从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容器中激活我的服务帐户?我有过类似的(未解决的问题)

我可以向docker传递一个credentials.json文件,但我不确定gcloud ssh是否将这些文件传递给我的实例

我可以更广泛地访问云平台,例如,我可以向cloudML API发布请求

gcloud beta ml predict --model ${MODEL_NAME} --json-instances images/request.json > images/${outfile}

成功了。我想我可以把它传递到计算引擎,然后从计算引擎传递到docker实例?感觉好像我没有按预期使用这些工具。我以为只要我在本地进行了身份验证,gcloud就会处理这个问题。

这是docker的问题,而不是gcloud权限的问题。Docker需要以--privileged的身份运行,以允许fuse装载。

Edit:添加显式作用域解决了第二个问题(连接到cloudML),但没有在Docker容器中装载存储桶这很可能是fuse、GCI和Docker的问题。您是在docker容器内还是在主机VM上运行gcifuse?一个问题可能是您没有以特权模式启动容器。尝试向docker命令添加--privileged标志。我还建议将问题的措辞改为关注fuse和GCI问题。这将有助于引起适当专家的注意。
gcloud auth activate-service-account
gcloud beta ml predict --model ${MODEL_NAME} --json-instances images/request.json > images/${outfile}