2014-08-30 8 views
6

मेरे पास ~ 300 एमबी ज़िप्ड स्थानीय फ़ाइल है जिसे मैं एक डॉकर छवि में जोड़ता हूं। अगला राज्य तब छवि निकालता है।डॉकर किसी फ़ाइल को किसी छवि के बिना इसे संपादित करने के लिए कैसे जोड़ें?

समस्या यह है कि एडीडी कथन का परिणाम एक प्रतिबद्धता में होता है जिसके परिणामस्वरूप एक नई फाइल सिस्टम परत छवि को ~ 300 एमबी की आवश्यकता होती है।

ADD /files/apache-stratos.zip /opt/apache-stratos.zip 
RUN unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

प्रश्न: वहाँ एक काम के आसपास एक प्रतिबद्ध पैदा करने के बिना स्थानीय फ़ाइलें जोड़ने के लिए है?

एक विकल्प एक सरल वेब सर्वर को चलाने के लिए है (उदाहरण के python -m SimpleHTTPServer) डोकर निर्माण शुरू करने, और फिर फ़ाइल को पुनः प्राप्त करने के wget का उपयोग कर, लेकिन यह थोड़ा गन्दा लगता है इससे पहले कि:

RUN wget http://localhost:8000/apache-stratos.zip && \ 
    unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

एक अन्य विकल्प के लिए है कंटेनर पर ज़िप्ड फ़ाइल निकालने के बजाय बिल्ड समय निकालें, लेकिन मैं जितनी जल्दी हो सके शुरू करना पसंद करूंगा।

उत्तर

13

the documentation के अनुसार, यदि आप स्थानीय फाइल सिस्टम (एक यूआरएल नहीं) से डॉकरफाइल (एक गंतव्य पथ के साथ, पथ + फ़ाइल नाम नहीं) में एक संग्रह फ़ाइल पास करते हैं, तो यह फ़ाइल को निर्देशिका में असम्पीडित करेगा ।

< src> किसी मान्यता प्राप्त संपीड़न प्रारूप में एक स्थानीय टार संग्रह है (पहचान, gzip, bzip2 या XZ) तो यह एक निर्देशिका के रूप में अनपैक किया जाता है। दूरस्थ यूआरएल से संसाधन डिकंप्रेस्ड नहीं हैं। जब एक निर्देशिका नकल या पैक है, यह टार -x रूप में एक ही व्यवहार किया है: परिणाम है के मिलन:

1) जो कुछ भी गंतव्य पथ में अस्तित्व और 2) स्रोत पेड़ की सामग्री, "2." के पक्ष में हल किए गए संघर्षों के साथ फ़ाइल-दर-फ़ाइल आधार पर।

कोशिश:

ADD /files/apache-stratos.zip /opt/ 

करें और देखें कि फ़ाइलें हैं, आगे विसंपीड़न बिना।

+8

ऐसा लगता है कि डॉकर 1.2.0 पर '.zip' फ़ाइल को डिकंप्रेस नहीं करता है। –

+0

"यदि [src] एक मान्यता प्राप्त संपीड़न प्रारूप (पहचान, gzip, bzip2 या xz) में स्थानीय टैर संग्रह है तो यह निर्देशिका के रूप में अनपॅक किया गया है।" –

+0

'.zip' फ़ाइलों के लिए समर्थन की कमी वाले एडीडी का तथ्य एक इच्छित निर्णय प्रतीत होता है: https://github.com/docker/docker/issues/15036 – jap1968

2

आप नव निर्मित परतों को स्क्वैश करने के लिए docker-squash का उपयोग कर सकते हैं। इससे छवि आकार को काफी कम करना चाहिए।

दुर्भाग्य से उल्लेख किया समाधान (RUN curl ... && unzip ... & rm ..., कंटेनर प्रारंभ पर खोल) पल (डोकर 1.11) पर केवल विकल्प हैं।

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

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