2014-09-17 9 views
5

को छोड़कर प्रोजेक्ट फ़ोल्डर जोड़ना मैं एक डॉकर कंटेनर में एक छोटा रेल ऐप चलाने की कोशिश कर रहा हूं। मैं करीब आ रहा हूं, हालांकि मैं अपने डॉकरफाइल से जूझ रहा हूं।डॉकरफ़ाइल

मैंने अपने प्रोजेक्ट फ़ोल्डर में सभी फ़ाइलों को दोबारा जोड़ने के लिए मेरे डॉकरफ़ाइल में निम्न आदेश जोड़ा है।

ADD . 

इस के बाद, मैं

RUN bundle install --deployment 

चलाने हालांकि, क्योंकि मेरे ADD आदेश भी Dockerfile कहते हैं, इसका मतलब है कि मेरी छवि कैश हर बार जब मैं मुझे rebundle करने के लिए मजबूर मेरा Dockerfile संपादित टूट जाता है।

https://docs.docker.com/reference/builder/#the-dockerignore-file के अनुसार, मैं एक .dockerignore फ़ाइल का उपयोग कर सकते Dockerfile अनदेखी करने के लिए है, लेकिन इस docker build आदेश

2014/09/17 22:12:46 Dockerfile was excluded by .dockerignore pattern 'Dockerfile' 

कैसे मैं आसानी से अपने छवि के लिए अपने प्रोजेक्ट में जोड़ सकते हैं के साथ विफल करने का कारण बनता है, लेकिन बाहर निकालने के Dockerfile, तो मैं डॉकर छवि कैश तोड़ नहीं है?

उत्तर

1

Github पर कि के लिए एक मुद्दा नहीं है: https://github.com/docker/docker/issues/7969

आपका मुख्य समस्या ADD की वजह से कैश और Dockerfile के संशोधन के निष्कासन है। मेंटेनर में से एक बताते हैं कि, पल के लिए, .dockerignore फ़ाइल इससे निपटने के लिए नहीं बनाया गया है:

यह - .dockerignore - जब आप ग्राहक से अपने संदर्भ अपलोड डेमॉन को और डेमॉन के लिए Dockerfile की जरूरत को छोड़ देता है कुछ फाइलें इमारत छवि। तो .dockerignore का मुख्य विचार (अभी के लिए) तेजी से संदर्भ अपलोड के लिए बड़े डीआईआर छोड़ रहा है, साफ संदर्भ नहीं। full comment on Github

मुझे डर है कि छवि कैश जब आप ADD Dockerfile जबकि these lines संशोधित नहीं कर रहे हैं टूट जाएगा हूँ।

हो सकता है कि कैश से निपटने के लिए एक तरह से सभी फाइलों को आप Dockerfile तुलना में एक अलग निर्देशिका में जोड़ना चाहते हैं जगह है:

. 
├── Dockerfile 
└── files_to_add/ 

तो अगर आप ADD files_to_add, Dockerfile शामिल नहीं किया जाएगा और कैश को बेदखल नहीं किया जाएगा।

लेकिन, मुझे नहीं लगता कि यह चाल एक समाधान है। मैं अपनी परियोजनाओं की जड़ पर अन्य फाइलों के बगल में अपना Dockerfile भी चाहता हूं।

+0

वास्तविक समस्या यहाँ फ़ाइल की उपस्थिति नहीं है, लेकिन के कारण डोकर छवि कैश के अमान्यकरण बंडल फिर से चलाने के लिए स्थापित करें। यही वह चीज है जो मैं चीजों को गति देने से बचने की कोशिश कर रहा हूं। –

+1

हाँ, मैं आपके बिंदु को समझता हूं (मुझे वास्तव में एक ही समस्या का सामना करना पड़ता है)। लेकिन ऐसा लगता है कि यह '.dockerignore'file के साथ अभी तक संभव नहीं है। रखरखाव में से एक बताता है कि इस मुद्दे में क्यों। इसके अलावा, आपको प्राप्त त्रुटि को [कोड स्रोत में] परिभाषित किया गया है (https://github.com/docker/docker/blob/e49c70109228d657790190007c8f9d7c55a25be2/api/client/commands.go#L136-L142)। तो इस पल के लिए, मुझे डर है कि यह संभव नहीं है। – Kuhess

+1

मैंने कैश बेदखल मुद्दे पर ध्यान केंद्रित करने के लिए उत्तर को अभी संशोधित किया है। – Kuhess

3

@ कुचेस के उत्तर पर टिप्पणी में आपकी स्पष्टीकरण, यह कहकर कि वास्तविक समस्या "डॉकर छवि कैश का अमान्यता है जो बंडल को फिर से चलाने के लिए इंस्टॉल करती है", आपको उत्तर देने में सहायक है।

मैं एक डॉकरफ़ाइल का उपयोग कर रहा हूं जो मेरे रेल 4.1 के लिए निम्न जैसा दिखता है। * ऐप। Gemfile * पहले जोड़कर, फिर बंडल इंस्टॉल करना, और उसके बाद शेष ऐप को जोड़ना, बंडल इंस्टॉल चरण तब तक कैश किया जाता है जब तक कि Gemfile * फ़ाइलों में से कोई एक बदल नहीं जाता है।

FROM ruby:2.1.3 

RUN adduser --disabled-password --home=/rails --gecos "" rails 

RUN gem install bundler --no-ri --no-rdoc 
RUN gem install -f rake --no-ri --no-rdoc 

RUN mkdir /myapp 
WORKDIR /myapp 

ADD Gemfile /myapp/Gemfile 
ADD Gemfile.lock /myapp/Gemfile.lock 
RUN bundle install 

ADD . /myapp 

RUN chown -R rails:rails /myapp 

USER rails 
EXPOSE 3000 
ENV RAILS_ENV production 
CMD bundle exec rails server -p 3000 

मेरे Dockerfile एप्लिकेशन के रूट निर्देशिका में है, लेकिन यह (या एप्लिकेशन के किसी अन्य भाग) में परिवर्तन के बाद चलाया जाता है बंडल के लिए छवि कैश क्योंकि वे जुड़ जाते हैं तोड़ने के लिए स्थापित का कारण नहीं है । एकमात्र चीज जो इसे तोड़ती है वह Gemfile * में बदलती है, जो सही है।

FYI करें, मेरे .dockerignore फ़ाइल के रूप में निम्नानुसार है:

.git 
log 
vendor/bundle 
+0

एड्यूसर भाग के लिए +1, इतने सारे रूट आधारित डॉकरफ़ाइल – gertas

संबंधित मुद्दे