Я хочу сделать это:

COPY src/ public/ config-overrides.js /usr/src/app/

Но я усвоил трудный путь, что это на самом деле означает:

COPY src/* public/* config-overrides.js /usr/src/app/

Что совсем не то, что я хочу.

Я могу взломать это через .dockerignore , но мне не нравится это решение, потому что:

  • если новый файл добавляется в репозиторий, его также необходимо добавить в .dockerignore .
  • Я хотел бы явно перечислить зависимости в моем Dockerfile

Как я могу скопировать явный список файлов и каталогов (а не только содержимое) в один слой?

Я просто SOL?

1 ответ1

0

Вы можете реорганизовать репо:

app
+-- src
+-- public
\-- config-overrides.js

И тогда вы бы просто

COPY app/ /usr/src/app/

Другой вариант заключается в многоэтапной сборке:

FROM scratch as app
COPY src/ /usr/src/app/ 
COPY public/ /usr/src/app/ 
COPY config-overrides.js /usr/src/app/ 

FROM your_base
COPY --from=app /usr/src/app/ /usr/src/app/

В противном случае, держите его в 3 отдельных слоях. Дополнительные накладные расходы дополнительного слоя действительно минимальны. Временами, когда вы хотите объединить слои, это когда вы получаете десятки слоев, если у вас есть один и тот же файл в нескольких слоях и вы его перезаписываете, или вы меняете / удаляете файл, созданный на предыдущем слое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .