You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地运行Cloud Run应用Docker时GCSFuse无法找到默认凭据

问题描述

我正按照官方教程将Cloud Storage Bucket挂载到Cloud Run应用,该应用仅使用Docker(无cloudbuild.yaml)。使用命令docker build --platform linux/amd64 -t fusemount .构建Docker镜像无问题,随后执行docker run --rm -p 8080:8080 -e PORT=8080 fusemount启动容器,触发gcsfuse --debug_gcs --debug_fuse gs://<my-bucket> /mnt/gs命令时连接失败,报错信息为:

2022/12/11 13:54:35.325717 Start gcsfuse/0.41.9 (Go version go1.18.4) for app "" using mount point: /mnt/gcs
2022/12/11 13:54:35.618704 Opening GCS connection...
2022/12/11 13:57:26.708666 Failed to open connection: GetTokenSource: DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

我已通过gcloud auth application-default login配置了应用默认凭据,且同一本地机器上的Python云函数可正常访问该存储桶,请问我遗漏了什么?

解决方法
  • 本地Docker容器无法直接读取主机上的应用默认凭据文件,需要手动将凭据文件挂载到容器内:
    1. 先确认本地凭据文件路径:执行echo $GOOGLE_APPLICATION_CREDENTIALS,若输出为空,默认路径是~/.config/gcloud/application_default_credentials.json
    2. 修改docker run命令,添加卷挂载参数,把主机的凭据文件映射到容器内对应路径:
      docker run --rm -p 8080:8080 -e PORT=8080 -v ~/.config/gcloud/application_default_credentials.json:/root/.config/gcloud/application_default_credentials.json fusemount
      
  • 也可以在启动容器时指定GOOGLE_APPLICATION_CREDENTIALS环境变量,配合卷挂载使用,灵活性更高:
    docker run --rm -p 8080:8080 -e PORT=8080 -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/creds.json -v ~/.config/gcloud/application_default_credentials.json:/tmp/creds.json fusemount
    
  • 注意确保容器内的gcsfuse进程有读取该凭据文件的权限,必要时可在Dockerfile中添加权限设置,或者调整主机端凭据文件的读取权限。

内容的提问来源于stack exchange,提问作者Finglish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:35:24