В Dockerfile у меня есть
COPY . .
Я хочу исключить весь каталог, в моем случае, каталог node_modules.
Что-то вроде этого:
COPY [all but **/node_modules/**] .
Это возможно с Docker?
docker
dockerfile
docker-copy
Александр Миллс
источник
источник
.dockerignore
?Ответы:
Создайте файл
.dockerignore
в каталоге контекста сборки Docker (так что в этом случае, скорее всего, это каталог, являющийся родительским для node_modules) с одной строкой в нем:хотя ты наверное просто хочешь
Информация о dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
источник
/config/nginx/ /config/logstash/
я нахожу это в контейнере bash:ls config/ gunicorn logs logstash nginx
ls /config/
, вы пытались добавить эти пути в ваш .dockerignore без ведущего/
?node_modules
не работает в подкаталогах.Для тех, кто не может использовать файл .dockerignore (например, если вам нужен файл в одной копии, но не в другой):
Да, но вам нужно несколько инструкций COPY. В частности, вам нужна копия для каждой буквы в имени файла, которое вы хотите исключить.
Продолжая, пока у вас не будет полного имени файла или просто префикса, в котором вы уверены, что других файлов не будет.
источник
COPY failed: no source files were specified
когда нет файлов, начинающихся с «нет», но не с «кивок».src/
пойти/var/www
и/conf/nginx.conf
перейти к/etc/nginx/conf.d/default.conf
. Кроме того, вы можете скопировать все, иRUN rm -r conf
позже (тоже сохранить исходное дерево, как было). Я хотел бы услышать, если у кого-то есть другое предложение.COPY [^node_modules]*
чтобы скопировать все файлы верхнего уровня.В моем случае мой Dockerfile содержал шаг установки, на котором создавался
vendor
каталог (эквивалент PHPnode_modules
). Я тогдаCOPY
этот каталог к окончательному изображению приложения. Поэтому я не мог положитьvendor
в свой.dockerignore
. Мое решение было просто удалить каталог перед выполнениемcomposer install
(эквивалент PHPnpm install
).Это решение работает и не раздувает окончательный образ, но оно не идеально, потому что
vendor
каталог на хосте копируется в контекст Docker во время процесса сборки, что добавляет время.источник
composer.lock
прежде чемcomposer install
. Без файла блокировки при следующей сборке может быть установлен другой набор зависимостей (папка вендора).Добавление .dockerignore работает для меня. Еще один момент. Те, кто пробует это решение в Windows , Windows не позволят вам создать файл .dockerignore (так как он по умолчанию не позволяет создавать файл, начиная с.)
Чтобы создать такой файл, начиная с. на ОС Windows , включают в себя окончание точка также, как:
.dockerignore.
и нажмите клавишу ВВОД (если вы включили просматривать варианты расширения из вариантов папки)источник
Исключение node_modules из текущего каталога
Исключая node_modules в любых непосредственных подкаталогах
Вот официальные документы
источник