Кеширование Docker с подстановочным знаком ADD

Я не уверен в этом, но я заметил, что кеш уровня докеров ломается при копировании файлов с подстановочными знаками, см. Следующий контекст сборки:

Проблема в том, что при изменении Kernel.php (добавьте пробел, что угодно..) и запуститеdocker build опять же, слои после "copy composer. *" запускаются снова, каждый раз, даже если никакие данные composer не были изменены...

первый забег

=> [1/6] FROM docker.io/library/composer               
=> [2/6] RUN set -eux;     composer global require hira
=> [3/6] COPY composer.* ./                            
=> [4/6] RUN set -eux;     composer install         --i
=> [5/6] COPY app/ /app/app/                           
=> [6/6] RUN set -eux;     composer dump-autoload ...

теперь редактировать Kernel.php и снова запускаем:

=> [1/6] FROM docker.io/library/composer              
=> CACHED [internal] helper image for file operations 
=> CACHED [2/6] RUN set -eux;     composer global requ
=> [3/6] COPY composer.* ./                           
=> [4/6] RUN set -eux;     composer install         --
=> [5/6] COPY app/ /app/app/                          
=> [6/6] RUN set -eux;     composer dump-autoload  ..

Это поведение можно исправить с помощью следующих изменений:

COPY composer.json ./
COPY composer.lock ./

вместо того

COPY composer* ./

Но что меня беспокоит, так это почему это происходит? Я потерял несколько часов с этим: /

Версия докера

➜  composer docker version
Client:
 Version:           19.03.8-ce
 API version:       1.40
 Go version:        go1.14
 Git commit:        afacb8b7f0
 Built:             Mon Mar 16 22:23:09 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.8-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.14
  Git commit:       afacb8b7f0
  Built:            Mon Mar 16 22:22:53 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.3.m
  GitCommit:        d76c121f76a5fc8a462dc64594aea72fe18e1178.m
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Вот файлы:

composer.json

{
    "name": "test/docker_composer_cached",
    "authors": [
        {
            "name": "Kitensei"
        }
    ],
    "require": {
        "moc/math": "dev-master"
    },
    "minimum-stability": "dev"
}

Dockerfile

# syntax=docker/dockerfile:1.0-experimental
FROM composer

COPY composer.* ./

RUN set -eux; \
    composer install \
        --ignore-platform-reqs \
        --no-autoloader \
        --no-dev \
        --no-interaction \
        --no-scripts \
        --no-suggest \
        --no-plugins \
        --no-progress \
        --prefer-dist \
    ; \
    find vendor -name ".git" -type d | xargs rm -rf

COPY app/ /app/app/

RUN set -eux; \
    composer dump-autoload \
        --classmap-authoritative \
        --optimize \
        --no-scripts \
        --no-dev


Приложение \Kernel.php

<?php

namespace App;

class Kernel {

}

0 ответов

Другие вопросы по тегам