Docker में डायरेक्टरी कमांड बदलें?


214

कर्ता में मैं यह करना चाहता हूं:

git clone XYZ
cd XYZ
make XYZ

हालाँकि, क्योंकि कोई cd कमांड नहीं है, इसलिए मुझे हर बार पूरे रास्ते से गुजरना पड़ता है (XYZ / fullpath बनाते हैं)। इसके लिए कोई अच्छा उपाय?


संबं
धत लं क

6
वर्क कमांड को एक संभावित वर्कअराउंड के रूप में अच्छी तरह से जाना जाता है
ट्रिकर्ड

1
वर्कअराउंड नहीं, यह अनुशंसित समाधान है docs.docker.com/engine/userguide/eng-image/…
John John Pichler

जवाबों:


151

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

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

'&&' के उपयोग के कारण, यह केवल अंतिम 'पाइप इंस्टॉल' कमांड को मिलेगा यदि पिछले सभी कमांड सफल हुए हैं।

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


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

531

किसी अन्य निर्देशिका में बदलने के लिए WORKDIR का उपयोग करें । कार्य निर्देशिका के बाद सभी RUN, CMD और ENTRYPOINT कमांड को उस निर्देशिका से निष्पादित किया जाएगा।

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make


14
मेरा मानना ​​है कि यह प्रश्न का एक अधिक उपयुक्त उत्तर है
जुआन लेनिन

1
ध्यान दें कि इससे कई परतें बनती हैं (मुझे लगता है?)
सेबी

यह स्वीकृत उत्तर होना चाहिए। परीक्षण किया है और यह काम करता है की पुष्टि कर सकते हैं
user1258361

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.