docker build .
वर्तमान निर्देशिका में Dockerfile
दिए गए डॉकर छवि को पुनर्निर्माण करेगा, और .dockerignore
फ़ाइल से मेल खाने वाले किसी भी पथ को अनदेखा करेगा।मैं कैसे देख सकता हूं कि किस फ़ाइल ने डैशरफ़ाइल `COPY` कथन को कैश को अमान्य करने के लिए किया?
किसी भी COPY
उस डॉकरफाइल में बयान बिल्ड कैश को अमान्य होने का कारण बनेंगे यदि डिस्क पर फ़ाइलों को आखिरी बार बनाया गया था।
मैंने देखा है कि अगर आप .git
dir को अनदेखा न करें, git fetch
की तरह साधारण चीजें हैं जो कोई पक्ष प्रभाव है निर्माण कैश अवैध हो जाएगी (शायद क्योंकि .git
निर्देशिका के भीतर कुछ ट्रैकिंग जानकारी बदल गया है।
यह अगर मुझे पता था कि ठीक जो वजह से कैश अवैध बनने के लिए फ़ाइलों को देखने के लिए कैसे बहुत मददगार होगा ... लेकिन मैं एक तरह से खोजने में असमर्थ किया गया है।
[Dockerfile संदर्भ] में (https://docs.docker.com/engine/reference/builder/#/dockerignore-file) यह है कि कहा गया है। एक प्रीप्रोकैसिंग चरण अग्रणी और पिछली सफेद जगह को हटा देता है और समाप्त करता है। और .. गो के फ़ाइलपाथ का उपयोग कर तत्व। क्लीन। प्रीप्रोकैसिंग के बाद रिक्त रेखाएं अनदेखा की जाती हैं ._ शायद सबसे अच्छा मैं उम्मीद कर सकता हूं कि फाइलों की एक सूची है जो _are_ माना जाता है। –
ऐसा लगता है। पुनर्संरचना विचार संभव है, आपको शायद एक जाने वाली उपयोगिता लिखनी होगी जो बिल्ड संदर्भ बना सकती है और 'डॉकर बिल्ड' जैसे कैश की जांच कर सकती है (या केवल 'डॉकर बिल्ड' का विस्तार करें)। अंतिम परत कैश हिट होने के बाद परत आईडी मिलने तक इसे छवि परतों को पार करने के लिए पिछली छवि आईडी की एक और तर्क की आवश्यकता होगी। फिर आप उस परत आईडी के लिए [tarsum] (https://github.com/docker/docker/blob/1a14bbc61e35fd2ca412e07fa6c456095756f892/pkg/tarsum/tarsum.go) बना सकते हैं, जिसमें सभी फ़ाइलों के लिए हैश शामिल है और वर्तमान की तुलना में संदर्भ का निर्माण करें। प्रत्येक निर्माण संदर्भ के लिए – Matt
'डॉकर बिल्ड' प्रतीत होता है [फ़ाइल जानकारी का हैश बनाए रखें] (https://github.com/docker/docker/blob/1a14bbc61e35fd2ca412e07fa6c456095756f892/builder/tarsum.go#L69)। – Matt