কপির সাথে ডক কিন্তু বর্জন সহ


230

একটি ডকফেরায়, আমার আছে I

COPY . .

আমি আমার ক্ষেত্রে নোড_মডিউলস ডিরেক্টরিটি একটি সম্পূর্ণ ডিরেক্টরি বাদ দিতে চাই।

এটার মতো কিছু:

   COPY [all but **/node_modules/**] .

এটি কি ডকারের দ্বারা সম্ভব?



আমি এই সম্পর্কিত প্রশ্নের উত্তর খুঁজছি: স্ট্যাকওভারফ্লো
আলেকজান্ডার মিলস

উত্তর:


377

.dockerignoreআপনার ডকার বিল্ড কনটেক্সট ডিরেক্টরিতে ফাইল তৈরি করুন (সুতরাং এই ক্ষেত্রে সম্ভবত একটি ডিরেক্টরি যা নোড_মডিউলগুলির পিতা বা মাতা) এতে একটি লাইন রয়েছে:

**/node_modules

যদিও আপনি সম্ভবত শুধু চান:

node_modules

ডকারিগিনোর সম্পর্কে তথ্য: https://docs.docker.com/engine/references/builder/#dockerignore-file


5
ধন্যবাদ, তাই "কপি"। কমান্ডটি পরিবর্তন করার দরকার নেই, আমি অনুমান করি
আলেকজান্ডার মিলস

আসলেই নয় /config/nginx/ /config/logstash/ls config/ gunicorn logs logstash nginx
:,

3
@ স্যালাহএডডিন যে কারণে আপনি লেখেন ls /config/নি, আপনি কি সেই পথগুলি আপনার .dockerignore এ যোগ না করে চেষ্টা করেছিলেন /?
পাবলো

8
শুধু node_modulesউপ-ডিরেক্টরিতে কাজ করে না।
rustyx

5
আপনি যদি এটি কপি করতে চান তবে কেবল সেই স্তরে নয়, সমস্যাটি আসলেই সমাধান করে না ...
ওয়েস

33

যারা .dockerignore ফাইল ব্যবহার করতে পারবেন না তাদের জন্য (যেমন আপনার যদি একটি কপিতে ফাইলের দরকার হয় তবে অন্যটি নয়):

হ্যাঁ, তবে আপনার একাধিক কপি নির্দেশাবলী দরকার। বিশেষত, আপনার যে ফাইল ফাইলটি বাদ দিতে চান তার প্রতিটি অক্ষরের জন্য আপনার একটি কপি দরকার।

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'

আপনার সম্পূর্ণ ফাইলের নাম না হওয়া পর্যন্ত অবিরত করা, বা কেবলমাত্র উপসর্গ আপনি যথাযথভাবে নিশ্চিত যে অন্য কোনও ফাইল থাকবে না।


1
এটি নষ্ট হবে না কারণ আপনি COPY failed: no source files were specifiedযখন 'না' দিয়ে শুরু করবেন এমন কোনও ফাইল নেই, তবে 'নোড' নয় a
mheck

1
বিকল্পভাবে, আপনি দুটি পৃথক উপ-ডিরেক্টরি ব্যবহার করতে পারেন (বিভিন্ন অনুলিপি লক্ষ্যগুলির জন্য), যাতে যেমন আমার এনগিনেক্স সেটআপে, আমি src/যেতে /var/wwwএবং /conf/nginx.confযেতে চাই /etc/nginx/conf.d/default.conf। এছাড়াও, আপনি সবকিছু অনুলিপি করতে পারেন এবং RUN rm -r confপরে (খুব উত্স গাছটি যেমন ছিল তেমন রাখুন)। কারও কাছে অন্য কোনও পরামর্শ থাকলে আমি শুনতে চাই।
যুবাল

1
নির্দিষ্ট ফাইল টাইপ বা ফাইল সমাপ্তির জন্য কী সমাধান হতে পারে যদি আমি এটি এইভাবে করি?
লেয়া রেইমান

এই পদ্ধতির একমাত্র নেতিবাচক দিকটি হ'ল আপনার ফোল্ডারের কাঠামো সমতল হয়েছে
ইসলাম প্রশ্ন।

আপনার যদি অনুলিপি করতে কেবল কয়েকটি ডিরেক্টরি থাকে (কেবল '/ অ্যাপ' বা '/ src' বলুন)। একটি সহজ উপায় হ'ল ডিরেক্টরিগুলি স্বতন্ত্রভাবে অনুলিপি করা (তাদের কাঠামো বজায় রাখা) এবং তারপরে আপনার কেবলমাত্র COPY [^node_modules]*শীর্ষ স্তরের সমস্ত ফাইল অনুলিপি করতে একটি প্রয়োজন ।
smdufb

9

আমার ক্ষেত্রে, আমার ডকফাইলে একটি ইনস্টলেশন পদক্ষেপ রয়েছে যা vendorডিরেক্টরিটি তৈরি করেছে (পিএইচপি সমতুল্য node_modules)। আমি তারপরে COPYএই ডিরেক্টরিটি চূড়ান্ত অ্যাপ্লিকেশন চিত্রে নিয়ে যাচ্ছি । অতএব, আমি vendorআমার মধ্যে রাখতে পারেন না .dockerignore। আমার সমাধানটি ছিল সম্পাদন করার আগে ডিরেক্টরি মুছে ফেলা composer install(পিএইচপি সমতুল্য 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হোস্টের ডিরেক্টরিটি বিল্ড প্রক্রিয়া চলাকালীন ডকার প্রসঙ্গে অনুলিপি করে যা সময় যোগ করে।


3
আপনার composer.lockআগে কেন অপসারণ করতে হবে তা নিশ্চিত করুন composer install। লক ফাইল ব্যতীত, পরের বার আপনি যখন নির্মাণ করবেন তখন নির্ভরতার একটি আলাদা সেট (বিক্রেতা ফোল্ডার) ইনস্টল করা যেতে পারে।
লেসেক

1
@ ল্যাসেক: আপনি ঠিক বলেছেন। আমি এটি পোস্ট করার পর থেকে আমি আরও ভালভাবে শিখেছি।
ক্যামেরন হাডসন

1
@ ক্যামেরন হাডসন লোকেরা এই খারাপ অভ্যাসটি অনুলিপি / পেস্ট করার আগে আপনার মূল উত্তরটি আপডেট করুন।
রবিন ভ্যান বালেন

2

.Dockerignore যুক্ত করা আমার পক্ষে কাজ করে। একটি অতিরিক্ত বিষয় যাঁরা উইন্ডোজে এই সমাধানটি চেষ্টা করছেন , উইন্ডোজগুলি আপনাকে .dockerignore ফাইল তৈরি করতে দেয় না (যেহেতু এটি ডিফল্টরূপে ফাইল দিয়ে আরম্ভের অনুমতি দেয় না))

এর সাথে শুরু করে এই জাতীয় ফাইল তৈরি করতে। উইন্ডোজ এ , একটি শেষ ডটও অন্তর্ভুক্ত করুন, যেমন: .dockerignore.এবং এন্টার টিপুন (আপনি ফোল্ডার অপশন থেকে এক্সটেনশন বিকল্পগুলি সক্রিয় করেছেন)


6
আপনি উইন্ডোতে একটি ফাইল তৈরি করতে পারেন যা বিন্দু দিয়ে বিন্দু দিয়ে শেষ করে ডট দিয়ে শুরু হয়।
জিম পেডিড

0

বর্তমান ডিরেক্টরি থেকে নোড_মডিউলগুলি বাদ দিচ্ছে

node_modules

কোনও তাত্ক্ষণিক সাব-ডিরেক্টরিতে নোড_মডিউলগুলি বাদ

*/node_modules

এখানে অফিসিয়াল ডক্স রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.