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
?