Скопировать несколько каталогов с помощью одной команды
Есть ли способ скопировать несколько каталогов в одну команду, чтобы уменьшить количество слоев? Например, вместо:
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
Я хочу сделать:
COPY dirone/ dirtwo/ dirthree/ ./
Однако это копирует содержимое каталогов... но я хочу скопировать сами каталоги.
Ответы
Ответ 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