如何让gsutil在docker容器中使用gcloud凭据

时间:2018-06-12 14:37:03

标签: docker google-cloud-platform gcloud gsutil google-cloud-shell

[更新]

为什么gsutil在使用Cloud Shell上的docker容器时应该使用Gcloud凭据?

根据[1],gsutil应该在可用时使用gcloud凭证:

  

通过gcloud auth配置凭据后,无论用户是否有任何boto配置文件(位于〜/ .boto,除非在BOTO_CONFIG环境变量中指定了不同的路径),将使用这些凭据。但是,如果需要一种未存储在gcloud凭证存储中的非GCS凭证(例如,S3帐户的HMAC凭证),gsutil仍会在boto配置文件中查找凭据。

这似乎在gcloud安装中工作正常,但在docker镜像中却没有。我在Cloud Shell中使用的过程是:

docker run -ti --name gcloud-config google/cloud-sdk gcloud auth login
docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gcloud compute instances list --project my_project
... (works ok)

docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gsutil ls gs://bucket/

ServiceException: 401 Anonymous caller does not have storage.objects.list access to bucket.

此致

凯文

[1] https://cloud.google.com/storage/docs/gsutil/addlhelp/CredentialTypesSupportingVariousUseCases

2 个答案:

答案 0 :(得分:1)

您需要使用凭据安装卷:

docker run -v ~/.config/gcloud:/root/.config/gcloud your_docker_image

答案 1 :(得分:0)

我发现@Alexandre的答案基本上对我有用,除了一个问题:我的凭据对bq有效,而对gsutil而言则不是 (OP的主题) ,返回

ServiceException: 401 Anonymous caller does not have storage.objects.list access to bucket

相同的凭证如何对一个有效,而对另一个无效!

最终我找到了它:~/.config/configurations/config_default看起来像这样:

[core]
account = xxx@xxxxxxx.xxx
project = xxxxxxxx
pass_credentials_to_gsutil = false

为什么?为什么没有记录?

无论如何...将标志更改为true,就可以对您进行排序了。