Dockerfile में, मेरे पास है
COPY . .
मैं एक पूरी निर्देशिका को बाहर करना चाहता हूं, मेरे मामले में, नोड_मॉड्यूल निर्देशिका।
कुछ इस तरह:
COPY [all but **/node_modules/**] .
क्या डॉकर के साथ यह संभव है?
Dockerfile में, मेरे पास है
COPY . .
मैं एक पूरी निर्देशिका को बाहर करना चाहता हूं, मेरे मामले में, नोड_मॉड्यूल निर्देशिका।
कुछ इस तरह:
COPY [all but **/node_modules/**] .
क्या डॉकर के साथ यह संभव है?
जवाबों:
.dockerignoreअपने docker निर्माण संदर्भ निर्देशिका में फ़ाइल बनाएँ (इसलिए इस मामले में, सबसे अधिक संभावना है कि एक निर्देशिका जो नोड_मॉडल के लिए एक अभिभावक है) इसमें एक पंक्ति के साथ:
**/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 निर्देशों की आवश्यकता है। विशेष रूप से, आपको फ़ाइल नाम में प्रत्येक अक्षर के लिए एक 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जब आप कोई फ़ाइल नहीं 'नहीं' से शुरू करते हैं, तो 'wod' मिलते हैं, लेकिन 'nod' नहीं।
src/होगा /var/wwwऔर /conf/nginx.confजाना होगा /etc/nginx/conf.d/default.conf। इसके अलावा, आप सब कुछ कॉपी कर सकते हैं, और RUN rm -r confबाद में (स्रोत के पेड़ को भी वैसा ही रख सकते हैं)। मैं यह सुनना चाहूंगा कि क्या किसी और का सुझाव है।
COPY [^node_modules]*शीर्ष स्तर की सभी फ़ाइलों की प्रतिलिपि बनाने के लिए एक की आवश्यकता होगी ।
मेरे मामले में, मेरे डॉकरफाइल में एक इंस्टालेशन स्टेप था, जो 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 मेरे लिए काम करता है। एक अतिरिक्त बिंदु जो लोग विंडोज पर इस समाधान की कोशिश कर रहे हैं , विंडोज़ आपको .dockerignore फ़ाइल बनाने की अनुमति नहीं देगा (क्योंकि यह डिफ़ॉल्ट रूप से फ़ाइल बनाने की अनुमति नहीं देता है।)
ऐसी फाइल बनाने के लिए जिसके साथ शुरू करना है। विंडोज पर , एक एंडिंग डॉट भी शामिल करें, जैसे: .dockerignore.और हिट एंटर (बशर्ते आपने फ़ोल्डर विकल्पों से दृश्य एक्सटेंशन विकल्प सक्षम किया हो)
वर्तमान निर्देशिका से नोड_मॉडल को छोड़कर
node_modules
किसी भी तत्काल उपनिर्देशिका में नोड_मॉडल को छोड़कर
*/node_modules
यहाँ आधिकारिक डॉक्स है
.dockerignore?