在 docker 和 Jenkins 中处理大型二进制文件 (3 GB)



我在 docker 文件中使用 google 模型(二进制文件:大约 3GB(,然后使用 Jenkins 在生产服务器上构建和部署它。其余代码是从位桶存储库中提取的。

我下载并解压缩文件的 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>rn<head><title>413 Request 
`Entity Too Large</title></head>rn<body 
bgcolor="white">rn<center>`<h1>413 Request
Entity Too Large</h1></center>rn<hr>
center>nginx/1.10.1</center>rn</body>rn</html>rn"

可能是文件太大吗?

在添加此文件之前,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 撰写拉取在此处失败,并出现意外的 eof。它尝试下载图像(1.6 GB(,但在几乎接近该大小后取消它,然后重试它,最终出现eof错误。

这让我想到了一个老问题,在这种情况下是否需要以不同的方式处理大文件?

更新2:问题已解决。我需要将client_max_body_size增加到 4 GB,还需要增加超时参数以从我们自己的存储库服务器中提取存储库。调整这两个参数已导致问题得到解决。

该问题主要是由于以下原因引起的:

  • 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

最新更新