2017-07-27 1 views
5

Ich verwende ein Google-Modell (Binärdatei: ca. 3 GB) in meiner Docker-Datei und verwenden Sie dann Jenkins zum Erstellen und Bereitstellen auf dem Produktionsserver. Der Rest des Codes wird aus dem Bitbucket-Repo gezogen.Umgang mit großen Binärdatei (3 GB) in Docker und Jenkins

Eine Beispielzeile aus der Docker-Datei, wo ich die Datei herunterladen und entzippen. Es passiert nur einmal, wenn dieser Befehl zwischengespeichert wird.

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 

Alles funktioniert gut, wenn ich das Andockfenster auf meinem lokalen Computer baue und ausführe. Wenn ich jedoch die Patch-Version mache, um diese Änderungen über Jenkins auf den Produktionsserver zu übertragen, schlägt mein Build-Prozess am Ende fehl. Die Setup-, Build- und Testphasen funktionieren einwandfrei. Die Post-Build-Phase schlägt jedoch fehl. (Der Buildprozess überträgt Änderungen an den Repo, und gemäß den Protokollen funktionieren alle Befehle in der Docker-Datei auch einwandfrei.) Etwas passiert danach und ich erhalte den folgenden Fehler, wenn ich mir die Logs anschaue.

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" 

Könnte es sein, dass die Datei zu groß ist?

Vor dem Hinzufügen dieser Datei funktionierte alles mit Docker und Jenkins auch gut.

Ich frage mich, ob es irgendwelche Einschränkungen in Docker/Jenkins in der Handhabung einer großen Datei wie folgt gibt? oder ich breche etwas so wie ich es annehme.

Update: die client_max_body_size Erhöhung löste dieses spezifischen Fehler. Allerdings bekomme ich einen weiteren Fehler bei ssh -o StrictHostKeyChecking=no [email protected] "cd /root/ourapi &&docker-compose pull api &&docker-compose -p somefolder up -d"

Der Docker-Compose Pull schlägt hier mit einem unerwarteten eof. Es versucht, das Bild herunterzuladen (1,6 GB), bricht es jedoch ab, nachdem es fast diese Größe erreicht hat, und versucht es dann erneut, was mit einem Fehler endet.

Was bringt mich zur alten Frage, wenn große Dateien in dieser Situation anders behandelt werden müssen?

Update 2: Das Problem behoben wurde. Ich musste die client_max_body_size auf 4 GB erhöhen und außerdem den Timeout-Parameter für das Ziehen des Repository von unserem eigenen Repository-Server erhöhen. Die Anpassung dieser beiden Parameter hat zur Lösung des Problems geführt.

+2

Wenn Ihr jenkins Server nginx oder anderen Proxy-Server verwenden, versuchen Sie diese https://stackoverflow.com/questions/35922145/jenkins-artifactory-plugin-give-unexpected -character-when-trying-to-upload-large – Gangaraju

+0

Erhöhung von client_max_body_size löste diesen spezifischen Fehler, aber jetzt bekomme ich Fehler mit Docker komponieren, die mich immer noch auf die Frage bringt, wenn große Dateien unterschiedlich behandelt werden müssen. – utengr

+2

Überlegen Sie, eine Antwort zu schreiben - Fragen ohne Antworten scheinen offen zu sein. –

Antwort

1

Das Problem war vor allem aufgrund der folgenden Ursachen haben:

  • Der Standardwert von client_max_body_size in Ngnix Serverkonfiguration sehr niedrig war. Aufgrund dessen konnten wir keine Datei mit 3,6 GB hochladen, daher haben wir diesen Wert auf 4 GB erhöht.
  • Wir betreiben einen Jetty-Server auf unserem Repository-Management-System, um HTTP-Datenverkehr zu verarbeiten. Daher mussten wir die Zeit für Jenkins verlängern, um die relevanten Docker-Dateien von dort zu holen.

Diese Antwort ist hauptsächlich im Zusammenhang mit diesem spezifischen Problem. Die Frage, wie mit solchen Dateien besser umgegangen wird, bleibt jedoch offen. Darüber hinaus ist es nicht klar, ob eine Erhöhung von client_max_body_size auf 4 GB im Allgemeinen eine gute Idee ist.

Relevante Dokumente für client_max_body_size: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size