2016-12-06 41 views
0

我试图在Docker上得到一个句柄。我有一个运行一个简单的Python脚本一个非常基本的容器设置:从Docker Container上载到S3

  1. 查询数据库
  2. 编写查询的CSV文件导致
  3. 上传CSV到S3(using the tinys3 package)。

当我从主机运行脚本时,一切都按预期工作:查询触发,csv被创建并完美上传。但是,当我从我的码头工人容器内运行,tinys3失败,出现以下错误:

requests.exceptions.ConnectionError: HTTPSConnectionPool(host='my-s3-bucket', port=443): Max retries exceeded with url: /bucket.s3.amazonaws.com/test.csv (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7f4f17cf7790>: Failed to establish a new connection: [Errno -2] Name or service not known',)) 

一切之前的作品(查询和CSV创建)。 This answer suggests that there's an incorrect endpoint。但这似乎不正确,因为从我的主机运行脚本不会导致错误。

所以我的问题是:我错过了明显的东西?这是tinys3模块的问题吗?我是否需要在容器中设置某些内容以允许它“发出”?还是有更好的方法来做到这一点?

+0

一起工作我已经......“解决”了它。与存储桶/文件名的命名有细微的差异。我可以上传'/subbucket/file.csv'作为文件,但不能将'file.csv'上传到'bucket/subbucket'(即使后者在我的主机上运行)。 –

+0

你是如何解决这个问题的?我的要求是超时没有错误信息 –

+0

这是一个关键的错误。因此,不是将bucket设置为“bucket/stuff/test /”,而是将我想要的文件设置为“file.py”,我必须将bucket设置为“bucket”并将文件名设置为“/stuff/test/file.py ”。奇怪的是,前者在本地工作,但不在我的服务器上工作。奇怪的问题,不知道你的是否相似。 –

回答

0

或者,您也可以使用minio-py客户端库。

请找到示例代码fput_object.py

from minio import Minio 
from minio.error import ResponseError 

client = Minio('s3.amazonaws.com', 
       access_key='YOUR-ACCESSKEYID', 
       secret_key='YOUR-SECRETACCESSKEY') 
# Put on object 'my-objectname-csv' with contents from 
# 'my-filepath.csv' as 'application/csv'. 
try: 
    client.fput_object('my-bucketname', 'my-objectname-csv', 
         'my-filepath.csv', content_type='application/csv') 
except ResponseError as err: 
    print(err) 

希望它能帮助。

声明:我与Minio

相关问题