2013-12-17 8 views
82

डोकर में मैं ऐसा करना चाहते हैं: कोई सीडी आदेश हैडोकर: परिवर्तन निर्देशिका आदेश

git clone XYZ 
cd XYZ 
make XYZ 

हालांकि, क्योंकि वहाँ, मैं पूर्ण पथ हर में पारित करने के लिए है (XYZ/fullpath बनाने)। इसके लिए कोई अच्छा समाधान?

+0

संबंधित: http://stackoverflow.com/questions/17891669/docker-command-fails-during-build-but-succeeds-while-executed-within-running-co – trcarden

+2

WORKDIR आदेश है एक संभावित कामकाज के रूप में भी उल्लेख किया गया है – trcarden

+0

कोई कामकाज नहीं है, यह अनुशंसित समाधान https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir –

उत्तर

54

आप एक स्क्रिप्ट, या रन के लिए एक और जटिल पैरामीटर चला सकते हैं। यहाँ एक उदाहरण एक Dockerfile से मैं पहले को देखने के लिए डाउनलोड किया है है:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \ 
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip 
'& &' के प्रयोग के कारण

, यह केवल अंतिम करने के लिए मिल जाएगा 'स्थापित पिप' कमांड सभी पिछले आदेशों अगर सफल हो गया

वास्तव में, के बाद से हर भागो बनाता है एक नया प्रतिबद्ध & (वर्तमान में) एक AUFS परत, यदि आप Dockerfile में भी कई आदेशों है, तो आप सीमा का उपयोग करेगा, इसलिए रन विलय (फ़ाइल स्थिर है जब) करने के लिए एक बहुत ही उपयोगी बात हो सकती है।

+6

यदि आप सोच रहे हैं, तो प्रभाव 'सीडी' का केवल वर्तमान 'रन' कमांड के लिए रहता है। अगला 'रन' वर्तमान 'वर्कडीर' से शुरू होगा। – Ritchie

234

किसी अन्य निर्देशिका में बदलने के लिए WORKDIR का उपयोग करें। वर्कडीआईआर के बाद सभी रन, सीएमडी और एंटरपॉइंट कमांड उस निर्देशिका से निष्पादित किए जाएंगे।

RUN git clone XYZ 
WORKDIR "/XYZ" 
RUN make 
+12

वर्कडीआईआर का उपयोग करके [डॉकरफाइल सर्वश्रेष्ठ अभ्यास] (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir) –

+2

के रूप में भी उद्धृत किया गया है, मुझे विश्वास है कि यह एक अधिक उचित उत्तर है सवाल – purpletentacle

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