Вы пытаетесь преобразовать это в копию многие ко многим. Это не поддерживается синтаксисом Dockerfile. Вам нужно иметь один каталог назначения на правой стороне. И если вашим источником является один или несколько каталогов, вы должны знать, что docker будет копировать содержимое этих каталогов, а не само имя каталога. В результате вы хотите:
COPY json-files/ ./
И затем вам нужно организовать ваш контекст сборки (в docker build .
.
или текущий каталог - это ваш контекст сборки, который отправляется на док-сервер для выполнения сборки) с каталогом под названием json-files
(может быть любое имя), содержащее только те файлы в структуре каталогов, которые вы хотите скопировать:
| json-files/
|- aaa/package.json
|- bbb/package.json
\- ccc/package.json
Вариант 2:
Вы можете структурировать свою сборку как многоэтапную сборку, чтобы свести ее к одному слою без изменения самого контекста сборки:
FROM scratch as json-files
COPY ./aaa/package.json /json-files/aaa/package.json
COPY ./bbb/package.json /json-files/bbb/package.json
COPY ./ccc/package.json /json-files/ccc/package.json
FROM your_base
COPY --from=json-files /json-files .
WORKDIR aaa
RUN npm install
COPY ./aaa ./aaa
Этот второй параметр аналогичен первому в представлении вашей команды COPY
, в нем есть только изображение в качестве контекста, а не контекст компоновки, переданный командой компоновки.
Все это говорит, что изменение от 3 команд копирования до 1 для небольших отдельных файлов, которые не перезаписывают друг друга, вряд ли окажет какое-либо заметное влияние на вашу производительность, и это выглядит как преждевременная оптимизация.