ΠΠ° 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
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π·Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Ρ ΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ. Π― ΠΈΡΡΠ»Π΅Π΄ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π΅Π΄Π΅Π»Π΅
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ CLI, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² COMPOSE_DOCKER_CLI_BUILD=true
(Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ°Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π²ΡΠΏΡΡΠΊΠ΅)
ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° (afaict) Π²ΡΠ·Π²Π°Π½Π° https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109
Π Π°Π·ΠΌΠ΅Ρ tar Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ len(contents)
== ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ tar ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ contents.encode('utf-8')
, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π±ΡΠ΄ΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° N> 1 Π±Π°ΠΉΡΠ°.