gpt4 book ai didi

python - Google 容器引擎上的 Blob download_as_string SSL 错误

转载 作者:太空狗 更新时间:2023-10-30 00:16:18 24 4
gpt4 key购买 nike

我在 Google Container Engine 上运行一个容器。在这个容器中,我有一些 python 代码试图从托管在 Google Cloud Storage 上的存储桶中读取一个 blob。

代码很简单:

from google.cloud import storage

gs = storage.Client(project="my-shiny-project")
gc_bucket = gs.get_bucket("my-bucket")
blob = gc_bucket.get_blob("my-blob")
print blob.download_as_string()

上面的代码在我的本地机器上工作得很好。但是,当我在 GKE 上的 Docker 容器中运行它时,创建 blob 对象的部分工作正常。但是,对 download_as_string 的调用失败了:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 453, in download_as_string
self.download_to_file(string_buffer, client=client)
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 412, in download_to_file
self._do_download(transport, file_obj, download_url, headers)
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 363, in _do_download
response = download.consume(transport)
File "/usr/lib/python2.7/site-packages/google/resumable_media/download.py", line 136, in consume
transport, u'GET', self.media_url, headers=headers)
File "/usr/lib/python2.7/site-packages/google/resumable_media/_helpers.py", line 134, in http_request
return transport.request(method, url, data=data, headers=headers)
File "/usr/lib/python2.7/site-packages/google/auth/transport/requests.py", line 179, in request
method, url, data=data, headers=request_headers, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

知道为什么会发生这种失败吗?

FWIW,我尝试了对 blob 对象的其他操作,例如获取 id、content_type、大小等。这些操作工作得很好。甚至那个对象的 exists() 方法也工作得很好(大概是对这个对象做了一个实际的 HEAD 请求)。

我使用的是“alpine 3.5”容器镜像。 Python 版本为“Python 2.7.13(默认,2016 年 12 月 22 日,09:22:15)”

[编辑]

我将图像更改为“debian:jessie”,代码工作正常。这些图像中的 openssl 包有不同的版本。看起来有点效果。确切地知道问题出在哪里仍然很好。

最佳答案

我自己弄清楚了,我不得不添加到 Dockerfile 中:

# Base Stuff
RUN apk add --update \
openjdk8-jre \
ca-certificates \
java-cacerts \
libre2 \
libre2-dev \
gcc \
build-base \
linux-headers \
musl-dev \
python3-dev \
make \
openssl \
openssl-dev \
py3-openssl \
libffi \
libffi-dev \
openssh \
openssh-client \
python3-dev

RUN update-ca-certificates && gcloud -q components install gsutil

这就成功了。

关于python - Google 容器引擎上的 Blob download_as_string SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43926621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com