2017-07-27 53 views
5

我在我的docker文件中使用google模型(二進制文件:大約3GB),然後使用Jenkins在生產服務器上構建和部署它。剩下的代碼從bitbucket回購。在Docker和Jenkins處理大型二進制文件(3 GB)

下載並解壓文件的docker文件中的示例行。它只會發生一次,因爲該命令將被緩存。

FROM python:2.7.13-onbuild 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

ARG DEBIAN_FRONTEND=noninteractive 
RUN apt-get update && apt-get install --assume-yes apt-utils 
RUN apt-get update && apt-get install -y curl 
RUN apt-get update && apt-get install -y unzip 
RUN curl -o - https://s3.amazonaws.com/dl4j-distribution/GoogleNews-vectors-negative300.bin.gz \ 
| gunzip > /usr/src/app/GoogleNews-vectors-negative300.bin 

當我在本地機器上構建並運行docker時,一切正常。但是,當我製作補丁版本以通過Jenkins將這些更改推送到生產服務器時,我的構建過程最終失敗。設置,構建和測試階段工作正常。但是,構建後階段失敗。 (構建過程將更改推送到回購站,並根據日誌,docker文件中的所有命令也可以正常運行。)之後會發生一些情況,並且在查看日誌時出現以下錯誤。

18:49:27 654f45ecb7e3: Layer already exists 
18:49:27 2c40c66f7667: Layer already exists 
18:49:27 97108d083e01: Pushed 
18:49:31 35a4b123c0a3: Pushed 
18:50:10 1e730b4fb0a6: Pushed 
18:53:46 error parsing HTTP 413 response body: invalid character '<' 
looking for beginning of value: "<html>\r\n<head><title>413 Request 
`Entity Too Large</title></head>\r\n<body 
bgcolor=\"white\">\r\n<center>`<h1>413 Request 
Entity Too Large</h1></center>\r\n<hr> 
center>nginx/1.10.1</center>\r\n</body>\r\n</html>\r\n" 

難道是文件太大?

在添加此文件之前,docker和Jenkins的一切工作都很好。

我想知道在處理像這樣的大文件時docker/Jenkins是否有任何限制?或者我正在接近它的方式打破了一些東西。

更新: 增加client_max_body_size解決了這個特定的錯誤。但是,我收到另一個錯誤ssh -o StrictHostKeyChecking=no [email protected] "cd /root/ourapi &&docker-compose pull api &&docker-compose -p somefolder up -d"

docker-compose pull在這裏出現意外的eof失敗。它試圖下載圖像(1.6 GB),但幾乎接近該尺寸後取消它,然後重試它,並以eof錯誤結束。

如果在這種情況下需要對大文件進行處理,這會帶給我一個老問題嗎?

更新2: 的問題已得到解決。我需要將client_max_body_size增加到4 GB,並且還需要增加從我們自己的存儲庫服務器中提取存儲庫的超時參數。調整這兩個參數已導致解決問題。

+2

如果使用nginx的或任何其他代理服務器的服務器詹金斯,試試這個https://stackoverflow.com/questions/35922145/jenkins-artifactory-plugin-give-unexpected -character-when-trying-to-upload-large – Gangaraju

+0

增加client_max_body_size解決了這個特定的錯誤,但現在我得到了錯誤與碼頭組成,這仍然使我想問題,如果大型文件需要以不同的方式處理。 – utengr

+2

考慮寫一個答案 - 沒有答案的問題似乎是開放的。 –

回答

1

的問題主要是由於由於以下原因:

  • 在Ngnix服務器配置client_max_body_size的默認值是非常低的。因此,我們無法上傳3.6 GB的文件,因此我們將此值增加到4 GB。
  • 我們在我們的資源庫管理系統上運行Jetty服務器來提供HTTP流量,所以我們需要增加Jenkins的超時時間以便從那裏提取相關的docker文件。

這個答案主要是在這個特定問題的背景下。然而,如何更好地處理這些文件的問題仍然是開放的。此外,一般來說,將client_max_body_size增加到4 GB是否是一個好主意還不清楚。

爲client_max_body_size相關的文檔: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size