Compose: Dockerfileは特定の状況で切り捨てられます

作成日 2019年12月31日  ·  3コメント  ·  ソース: docker/compose

この件についての説明

条件

  1. コンテキストディレクトリからのDockerfile
  2. Dockerfileにはキリル文字(または私が推測する他の非ラテン記号)があります

結果:

docker-compose buildでは、Dockerfileは、その中のキリル文字の量によって切り捨てられます。

たとえば、Dockerfileで7つのキリル文字を取得した場合、ファイルの終わりの最後の7つの記号は「切り取られ」ます。

コンテキスト情報(バグレポート用)

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

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

docker-compose config出力

see in the "steps to reproduce"

問題を再現する手順

context (空の)ディレクトリ、 docker-compose.ymlおよび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

docker-compose build test-fail実行します

観測結果

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

文字列h test\n (7つの記号)が消えました。

Dockerfileがコンテキストフォルダーにある場合、この問題は発生しません(テストパスサービスを確認してください)。

この問題は、 docker buildを使用しても発生しません。

期待される結果

期待される結果は、 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

スタックトレース/完全なエラーメッセージ

N/A
kinbug

全てのコメント3件

明確な再現サンプルと破壊条件の初期調査でこの問題を報告していただきありがとうございます。 来週この問題を調査します

回避策として、 COMPOSE_DOCKER_CLI_BUILD=true設定することでネイティブCLIビルダーを有効にできます(これは将来のリリースでデフォルト値になると思います)

問題(機能)はhttps://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107-L109が原因で発生し

tarサイズはlen(contents) ==文字数として計算されますが、実際のtarエントリはcontents.encode('utf-8')によって設定され、一部の文字はN> 1バイトでエンコードされるため切り捨てられます。

このページは役に立ちましたか?
0 / 5 - 0 評価