Compose: Dockerfile рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рджрд┐рд╕ре░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: docker/compose

рдореБрджреНрджреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг

рд╢рд░реНрддреЗрдБ

  1. Dockerfile рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдмрд╛рд╣рд░
  2. Dockerfile рдХреЗ рдкрд╛рд╕ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдкреНрд░рддреАрдХ (рдпрд╛ рдЕрдиреНрдп рдЧреИрд░-рд▓реИрдЯрд┐рди рдкреНрд░рддреАрдХ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)

рдкрд░рд┐рдгрд╛рдо:

docker-compose build рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдореЗрдВ рд╕рд╛рдЗрд░рд┐рд▓рд┐рдХ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореБрдЭреЗ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдореЗрдВ 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 рдкреНрд░рддреАрдХ) рдЧрд╛рдпрдм рд╣реЛ рдЧрдП рдереЗред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ рдпрджрд┐ рдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓ рд╕рдВрджрд░реНрдн рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ (рдкрд░реАрдХреНрд╖рдг-рдкрд╛рд╕ рд╕реЗрд╡рд╛ рдХреЛ рджреЗрдЦреЗрдВ)ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ 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

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдЬрдирди рдирдореВрдиреЗ рдФрд░ рдЯреВрдЯрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк COMPOSE_DOCKER_CLI_BUILD=true рд╕реЗрдЯ рдХрд░рдХреЗ рдореВрд▓ рд╕реАрдПрд▓рдЖрдИ рдмрд┐рд▓реНрдбрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рдмрди рдЬрд╛рдПрдЧрд╛)

рдореБрджреНрджрд╛ (afaict) https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109 рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ

рдЯрд╛рд░ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ len(contents) == рд╡рд░реНрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ contents.encode('utf-8') рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдХреЛ N> 1 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

squeaky-pl picture squeaky-pl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DhairyashilBhosale picture DhairyashilBhosale  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

29e7e280-0d1c-4bba-98fe-f7cd3ca7500a picture 29e7e280-0d1c-4bba-98fe-f7cd3ca7500a  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dimsav picture dimsav  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CrimsonGlory picture CrimsonGlory  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ