Python Google容器引擎:访问云存储

Python Google容器引擎:访问云存储,python,docker,google-cloud-storage,google-cloud-platform,google-kubernetes-engine,Python,Docker,Google Cloud Storage,Google Cloud Platform,Google Kubernetes Engine,我无法在Google容器引擎中获取应用程序默认凭据。文档说它们是为应用程序引擎和计算引擎设计的,但我被告知它们应该透明地传递到容器引擎上运行的容器 以下是失败的代码: credentials = GoogleCredentials.get_application_default() service = discovery.build('storage', 'v1', credentials=credentials) 它失败的错误:AssertionError:找不到服务“memcache”的a

我无法在Google容器引擎中获取应用程序默认凭据。文档说它们是为应用程序引擎和计算引擎设计的,但我被告知它们应该透明地传递到容器引擎上运行的容器

以下是失败的代码:

credentials = GoogleCredentials.get_application_default()
service = discovery.build('storage', 'v1', credentials=credentials)
它失败的错误:
AssertionError:找不到服务“memcache”的api代理。

期望应用程序默认凭据与容器引擎一起工作是否正确?如果没有,有人能推荐一种正确的方式从运行在容器引擎上的容器连接到云存储吗

谢谢


编辑:在运行
gcloud beta auth应用程序默认激活服务帐户--key file.json
之后,上面Python示例中的
凭证
对象将填充数据。然而,我仍然遇到同样的错误。

在容器引擎上访问云存储的最简单方法似乎是库

如果容器上安装了App Engine SDK,它将无法使用零配置(gcloud会找到它并假定它正在App Engine上运行)。因此,我停止使用官方软件

只需将gcloud添加到requirements.txt(或运行
pip安装gcloud
)。只要容器位于Google计算引擎实例上,您就可以访问同一项目中的任何存储桶

例如:

from gcloud import storage
client = storage.Client()
bucket = client.get_bucket('<bucket_name>')
blob = bucket.blob('test_file.txt')
blob.upload_from_string('test content')
从gcloud导入存储
client=storage.client()
bucket=client.get_bucket(“”)
blob=bucket.blob('test_file.txt'))
blob.upload\u from\u string('测试内容')

gcloud库也为和存在。

您使用的是什么运行时?@mgilson请告诉我这是否是您要求的:
客户端版本:Version.Info{Major:“1”,Minor:“2”,GitVersion:“v1.2.4”,GitCommit:“3eede1e3BE6848B877FF80A93DA3785D9034D0A4F”,gitRestate:“clean”}服务器版本:Version.Info{Major:“1”,Minor:“2”,GitVersion:“v1.2.4”,GitCommit:“3eed1e3be6848b877ff80a93da3785d9034d0a4f”,GitTreeState:“clean”}
IIRC,容器引擎支持不同的python运行时,但并非所有运行时都支持
memcache
。(FWIW,这超出了我的经验范围,所以我可能错了——我只是从我的脑海中提取了这些信息,我似乎出于某种原因缓存了一些这些信息…@mgilson我使用了官方的云SDK。
gcloud
命令确实可以从终端直接执行,但由于某些原因,我无法让Python正确地进行身份验证。@mgilson非常感谢您的帮助。我找到了另一种访问云存储的方法,并将其发布在下面。我很高兴您找到了解决方案。我已经编辑了代码以添加import语句——只是为了明确起见。