2017-05-11 34 views
6

我在Google容器引擎上运行容器。在这个容器中,我有一些python代码试图从托管在Google云端存储中的存储桶中读取blob。Blob download_as_string Google容器引擎上的SSL错误

的代码很简单,只要:

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,size等等。这些操作工作得很好。即使该对象的exists()方法工作得很好(这可能对对象实际上是HEAD请求)。

我正在使用“高山3.5”容器图像。 Python版本是 “巨蟒2.7.13(默认情况下,2016年12月22日,9点22分15秒)”

[编辑]

我改变了形象'的debian:杰西和代码的工作就好了。这些映像中的openssl包有不同的版本。看起来像有一些效果。确切地知道问题是什么会很好。

+0

同样的错误,我们正试图端口基于Ubuntu opencv实现图像与Ubuntu的需要超过7GB大小更成为阿尔卑斯山的Linux是在仅有的一个GB勉强得到,问题我们已经是SSL的问题,我们已经尝试安装CA-' certificates'和'Java的cacerts'运行'更新-CA-certificates',没有运气,可能你终于克服Alpine3.5错误? – danigosa

回答

1

我弄清楚自己,我不得不添加到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 

,这把的伎俩。

这里
相关问题