[更新]
为什么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
答案 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
,就可以对您进行排序了。