Подтвердить что ты не робот

Скопировать несколько каталогов с помощью одной команды

Есть ли способ скопировать несколько каталогов в одну команду, чтобы уменьшить количество слоев? Например, вместо:

COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree

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

COPY dirone/ dirtwo/ dirthree/ ./

Однако это копирует содержимое каталогов... но я хочу скопировать сами каталоги.

4b9b3361

Ответ 1

Это документированное поведение команды копирования:

Если <src> - это каталог, все содержимое каталога копируется, включая метаданные файловой системы.

Примечание. Сама директория не копируется, просто ее содержимое.

Наилучшее обходное решение, которое я могу предложить, - это изменить макет каталога в вашей папке сборки, переместить три папки в одну родительскую папку и добавить родителя.

Ответ 2

Как ответил BMitch, это ожидаемое КОПИРОВАНИЕ.

Альтернативой было бы ADD содержимое тарбола.

Создать начальный тарбол

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/

Добавьте его в сборку

FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree

Тарбол автоматически извлекается

○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three

Обратите внимание, что каждый раз, когда вы обновляете tar файл, вы аннулируете кэш сборки Docker для этого шага. Если вы имеете дело с большим количеством файлов, возможно, вы захотите проявить tar -c когда будете делать tar -c. Вы также можете использовать tar -u если можете иметь дело с файлами, которые не удаляются автоматически из архива.

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something