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

Kev*_*evH 4 gsutil docker google-cloud-platform gcloud google-cloud-shell

[更新]

为什么 gsutil 在 Cloud Shell 上的 docker 容器中运行时不使用 Gcloud 凭据?

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

通过 gcloud auth 配置凭据后,无论用户是否有任何 boto 配置文件(除非在 BOTO_CONFIG 环境变量中指定了不同的路径,否则这些文件位于 ~/.boto 中)都将使用这些凭据。但是,如果需要一种未存储在 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.
Run Code Online (Sandbox Code Playgroud)

问候

凯文

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

小智 5

您需要使用您的凭据挂载一个卷:

docker run -v ~/.config/gcloud:/root/.config/gcloud your_docker_image
Run Code Online (Sandbox Code Playgroud)