Compose: Dockerfile devient tronqué dans certaines circonstances

Créé le 31 déc. 2019  ·  3Commentaires  ·  Source: docker/compose

Description du problème

conditions

  1. Dockerfile hors du répertoire de contexte
  2. Dockerfile a des symboles cyrilliques (ou d'autres symboles non latins, je suppose)

résultat:

Sur docker-compose build Dockerfile tronqué par la quantité de symboles cyrilliques qu'il contient.

Par exemple, si j'ai 7 symboles cyrilliques dans le Dockerfile, les 7 derniers symboles de la fin du fichier deviennent "coupés".

Informations contextuelles (pour les rapports de bogue)

Sortie de 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

Sortie de 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

Sortie de docker-compose config

see in the "steps to reproduce"

Étapes pour reproduire le problème

Créez context répertoire docker-compose.yml et 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

Courir docker-compose build test-fail

Résultat observé

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

La chaîne h test\n (7 symboles) a disparu.

Ce problème n'apparaît pas si le Dockerfile est dans le dossier de contexte (regardez le service de test-pass).

Ce problème n'apparaît pas en utilisant docker build .

Résultat attendu

Le résultat attendu est une image créée avec succès, comme en utilisant 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 / message d'erreur complet

N/A
kinbug

Tous les 3 commentaires

merci d'avoir signalé ce problème avec un échantillon de reproduction clair et une enquête initiale sur les conditions de rupture. J'étudierai ce problème la semaine prochaine

Pour contourner le problème, vous pouvez activer le générateur CLI natif en définissant COMPOSE_DOCKER_CLI_BUILD=true (je m'attends à ce que cela devienne la valeur par défaut dans une version future)

problème (afaict) est causé par https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109

La taille de tar est calculée comme len(contents) == nombre de caractères, tandis que l'entrée tar réelle est définie par contents.encode('utf-8') , qui sera ensuite tronquée car certains caractères seront codés sur N> 1 octets.

Cette page vous a été utile?
0 / 5 - 0 notes