2016-12-06 73 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

相關問題