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
version: '3.7'
services:
test-pass:
build:
context: .
dockerfile: Dockerfile
test-fail:
build:
context: context
# path relative to the context
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
明確な再現サンプルと破壊条件の初期調査でこの問題を報告していただきありがとうございます。 来週この問題を調査します
回避策として、 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バイトでエンコードされるため切り捨てられます。