Compose: Dockerfile werden unter bestimmten Umständen abgeschnitten

Erstellt am 31. Dez. 2019  ·  3Kommentare  ·  Quelle: docker/compose

Beschreibung des Problems

Bedingungen

  1. Docker-Datei aus dem Kontextverzeichnis
  2. Dockerfile hat kyrillische Symbole (oder andere nicht-lateinische Symbole, nehme ich an)

Ergebnis:

Auf docker-compose build Dockerfile, abgeschnitten durch die Anzahl der darin enthaltenen kyrillischen Symbole.

Wenn ich zum Beispiel 7 kyrillische Symbole in der Docker-Datei habe, werden die letzten 7 Symbole am Ende der Datei "abgeschnitten".

Kontextinformationen (für Fehlerberichte)

Ausgabe von docker-compose version

docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.1
OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

Ausgabe von docker version

Client:
 Version:           19.03.5-ce
 API version:       1.40
 Go version:        go1.13.4
 Git commit:        633a0ea838
 Built:             Fri Nov 15 03:19:09 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.5-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.4
  Git commit:       633a0ea838
  Built:            Fri Nov 15 03:17:51 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.2.m
  GitCommit:        d50db0a42053864a270f648048f9a8b4f24eced3.m
 runc:
  Version:          1.0.0-rc9
  GitCommit:        d736ef14f0288d6993a1845745d6756cfc9ddd5a
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Ausgabe von docker-compose config

see in the "steps to reproduce"

Schritte zum Reproduzieren des Problems

Erstellen Sie das Verzeichnis context (leer), docker-compose.yml und Dockerfile

docker-compose.yml

version: '3.7'

services:
  test-pass:
    build:
      context: .
      dockerfile: Dockerfile
  test-fail:
    build:
      context: context
      # path relative to the context
      dockerfile: ../Dockerfile

Dockerfile

FROM alpine

# шшш и ффф

RUN touch test

Führen Sie docker-compose build test-fail

Beobachtetes Ergebnis

docker-compose build test-fail
Building test-fail
Step 1/2 : FROM alpine
 ---> cdf98d1859c1
Step 2/2 : RUN touc
 ---> Running in fc83cc1f2b69
/bin/sh: touc: not found
ERROR: Service 'test-fail' failed to build: The command '/bin/sh -c touc' returned a non-zero code: 127

Die Zeichenfolge h test\n (7 Symbole) wurde verschwunden.

Dieses Problem tritt nicht auf, wenn sich die Docker-Datei im Kontextordner befindet (siehe Test-Pass-Dienst).

Dieses Problem tritt bei Verwendung von docker build .

Erwartetes Ergebnis

Das erwartete Ergebnis ist ein erfolgreich erstelltes Bild, z. B. mit docker build :

docker build -f Dockerfile context
Sending build context to Docker daemon  1.583kB
Step 1/2 : FROM alpine
 ---> cdf98d1859c1
Step 2/2 : RUN touch test
 ---> Using cache
 ---> bb6362bff392
Successfully built bb6362bff392

Stacktrace / vollständige Fehlermeldung

N/A
kinbug

Alle 3 Kommentare

Vielen Dank, dass Sie dieses Problem mit einem eindeutigen Reproduktionsmuster und einer ersten Untersuchung der Bruchbedingungen gemeldet haben. Ich werde dieses Problem nächste Woche untersuchen

Um dieses Problem zu umgehen, können Sie den nativen CLI-Builder aktivieren, indem Sie COMPOSE_DOCKER_CLI_BUILD=true festlegen (ich gehe davon aus, dass dies in einer zukünftigen Version zum Standardwert wird).

Das Problem (afaict) wird durch https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109 verursacht

Die Teergröße wird berechnet als len(contents) == Zeichenanzahl, während der tatsächliche Teereintrag durch contents.encode('utf-8') , der dann abgeschnitten wird, wenn einige Zeichen auf N> 1 Byte codiert werden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen