我在我的docker文件中使用了谷歌模型(二进制文件:大约3GB),然后使用Jenkins在生产服务器上构建和部署它。其余的代码是从bitbucket repo中提取的。
我在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将补丁版本推送到生产服务器时,我的构建过程最终失败了。设置,构建和测试阶段工作正常。但是,构建后阶段失败。 (构建过程将更改推送到repo,并且根据日志,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 root@ipaddress "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,并且还需要增加超时参数以从我们自己的存储库服务器中提取存储库。调整这两个参数可以解决问题。
答案 0 :(得分:1)
问题主要是由于以下原因引起的:
这个答案主要是针对这个具体问题。但是,关于如何以更好的方式处理这些文件的问题仍然存在。此外,目前尚不清楚将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