У Dockerfile у мене є
COPY . .
Я хочу виключити весь каталог, в моєму випадку - каталог node_modules.
Щось на зразок цього:
COPY [all but **/node_modules/**] .
Це можливо з Докером?
У Dockerfile у мене є
COPY . .
Я хочу виключити весь каталог, в моєму випадку - каталог node_modules.
Щось на зразок цього:
COPY [all but **/node_modules/**] .
Це можливо з Докером?
Відповіді:
Створіть файл .dockerignoreу своєму контекстному каталозі docker build (так що в цьому випадку, швидше за все, каталог, який є батьківським для node_modules) з одним рядком у ньому:
**/node_modules
хоча ти, мабуть, просто хочеш:
node_modules
Інформація про dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
/config/nginx/ /config/logstash/я знаходжу це в контейнері баш:ls config/ gunicorn logs logstash nginx
ls /config/, ви намагалися додати ці шляхи до свого .dockerignore без ведучого /?
node_modulesне працює в підкаталогах.
Для тих, хто не може використовувати .dockerignore файл (наприклад, якщо вам потрібен файл в одній COPY, але не в іншій):
Так, але вам потрібно кілька інструкцій КОПІЮВАННЯ. Зокрема, вам потрібна КОПІЯЦІЯ для кожної літери у назві файла, яке ви хочете виключити.
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
Продовжуйте, поки ви не отримаєте повне ім'я файлу або просто префікс, на який ви впевнені, що інших файлів не буде.
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каталог (еквівалент PHP node_modules). Потім я переміщую COPYцей каталог до кінцевого зображення програми. Тому я не міг поставити vendorсвого .dockerignore. Моїм рішенням було просто видалити каталог перед виконанням composer install(еквівалент PHP npm install).
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
Це рішення працює і не роздуває остаточне зображення, але воно не є ідеальним, оскільки vendorкаталог на хості копіюється в контекст Докера під час процесу збирання, що додає часу.
composer.lockраніше composer install. Без файлу блокування інший набір залежностей (папка постачальника) може бути встановлений при наступному складанні.
Додавання .dockerignore працює для мене. Один додатковий момент Тим, хто намагається це рішення в Windows , Windows не дасть вам створити .dockerignore файл (оскільки він за замовчуванням не дозволяє створювати файл, починаючи з.)
Щоб створити такий файл, починаючи з. на ОС Windows , включають в себе закінчення точка також, як: .dockerignore.і натисніть клавішу Enter (якщо ви включили переглядати варіанти розширення з варіантів папки)
Виключення node_modules з поточного каталогу
node_modules
Виключення node_modules в будь-яких безпосередніх підкаталогах
*/node_modules
.dockerignore?