2015-05-15 2 views
87

Следующая Dockerfile содержит четыре слоя: COPYКак скопировать несколько файлов в один слой с помощью Dockerfile?

COPY README.md ./ 
COPY package.json ./ 
COPY gulpfile.js ./ 
COPY __BUILD_NUMBER ./ 

Как скопировать эти файлы, используя один слой вместо этого? Далее был судим:

COPY [ 
    "__BUILD_NUMBER ./", 
    "README.md ./", 
    "gulpfile ./", 
    "another_file ./", 
] 

ответ

122
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./ 

или

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"] 

Вы также можете использовать подстановочные символы в спецификации ИСХ. See the docs for a little more detail.

Справочники специальные! Если вы пишете

COPY dir1 dir2 ./ 

, что на самом деле работает как

COPY dir1/* dir2/* ./ 

Если вы хотите скопировать несколько каталогов (не их содержание) в директории назначения в одной команде, вам необходимо настроить контекст сборки, чтобы ваши исходные каталоги находились под общим родителем, а COPY - родителем.

+8

Обратите внимание, что если источником являются каталоги, это копирует каталог * содержимое *, а не сами каталоги. – Claudiu

+3

Обратите внимание, что каталог назначения тот же. Если вы делаете много разных файлов с разными адресами, вы можете захотеть создать оверлейную файловую систему (например, chroot), а затем превратить ее в архив tar и добавить ее с помощью ADD. – tudor

+3

@Claudiu Как скопировать сами папки? – k0pernikus

1

простой

COPY README.md package.json gulpfile.js __BUILD_NUMBER ./ 

из doc

Если указано несколько ресурсов, либо непосредственно, либо из-за использование шаблона, то должен быть каталог, и он должен конец с косой чертой /.