【问题标题】:Uploading to S3 from Docker Container从 Docker 容器上传到 S3
【发布时间】:2016-12-07 22:47:19
【问题描述】:

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

  1. 查询数据库
  2. 将查询结果写入 CSV 文件
  3. 将 CSV 上传到 S3 (using the tinys3 package)。

当我从我的主机运行脚本时,一切都按预期工作:查询触发,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 模块的问题吗?我是否需要在我的容器中设置一些东西以允许它“呼出”?或者有更好的方法吗?

【问题讨论】:

  • 我已经...“解决”了它。存储桶/文件名的命名略有不同。我可以将“/subbucket/file.csv”作为文件上传,但不能将“file.csv”上传到“bucket/subbucket”(即使后者适用于我的主机)。
  • 你是怎么解决这个问题的?我的请求超时,没有错误消息
  • 这是一个关键错误。因此,与其将存储桶设置为“bucket/stuff/test/”并将我想要的文件设置为“file.py”,不如将存储桶设置为“bucket”并将文件名设置为“/stuff/test/file.py” '。奇怪的是,前者在本地工作,但不在我的服务器上。奇怪的问题,不知道你的是否类似。

标签: python docker amazon-s3


【解决方案1】:

或者,您也可以使用 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合作

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多