从Docker Container上传到S3

时间:2016-12-06 18:43:00

标签: python docker amazon-s3

我试图了解Docker。我有一个非常基本的容器设置,它运行一个简单的python脚本:

  1. 查询数据库
  2. 编写查询结果的CSV文件
  3. 将CSV上传到S3(using the tinys3 package)。
  4. 当我从主机运行脚本时,一切都按预期工作:查询触发,csv创建并完美上传。但是当我从Docker容器中运行它时,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模块的问题吗?我是否需要在我的容器中设置一些内容以允许它“呼叫”#34;?或者有更好的方法吗?

1 个答案:

答案 0 :(得分: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