Compose: Dockerfile menjadi terpotong dalam keadaan tertentu

Dibuat pada 31 Des 2019  ·  3Komentar  ·  Sumber: docker/compose

Deskripsi masalah

kondisi

  1. Dockerfile keluar dari direktori konteks
  2. Dockerfile memiliki simbol cyrillic (atau simbol non-latin lainnya yang saya kira)

hasil:

Pada docker-compose build Dockerfile dipotong oleh jumlah simbol cyrillic di dalamnya.

Misalnya, jika saya mendapat 7 simbol cyrillic di Dockerfile, 7 simbol terakhir dari akhir file menjadi "terputus".

Informasi konteks (untuk laporan bug)

Keluaran 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

Output 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

Output docker-compose config

see in the "steps to reproduce"

Langkah-langkah untuk mereproduksi masalah tersebut

Buat context (kosong) direktori, docker-compose.yml dan Dockerfile

buruh pelabuhan-menulis.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

Jalankan docker-compose build test-fail

Hasil yang diamati

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

String h test\n (7 simbol) telah hilang.

Masalah ini tidak muncul jika Dockerfile ada di folder konteks (lihat layanan uji-lulus).

Masalah ini tidak muncul dengan menggunakan docker build .

Hasil yang diharapkan

Hasil yang diharapkan adalah gambar berhasil dibuat, seperti dengan menggunakan 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 / pesan kesalahan penuh

N/A
kinbug

Semua 3 komentar

terima kasih telah melaporkan masalah ini dengan sampel reproduksi yang jelas dan penyelidikan awal tentang kondisi yang melanggar. Saya akan menyelidiki masalah ini minggu depan

Sebagai solusinya, Anda dapat mengaktifkan pembuat CLI asli dengan menyetel COMPOSE_DOCKER_CLI_BUILD=true (Saya berharap ini menjadi nilai default di rilis mendatang)

masalah (afaict) disebabkan oleh https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109

ukuran tar dihitung sebagai len(contents) == jumlah karakter, sedangkan entri tar sebenarnya ditetapkan oleh contents.encode('utf-8') , yang kemudian akan dipotong karena beberapa karakter akan dikodekan pada N> 1 byte.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat