डॉक निष्पादन के साथ 2 कमांड कैसे चलाएं


89

मुझे डॉकॉर निष्पादन के साथ 2 कमांड चलाने की आवश्यकता है। मैं डॉकटर कंटेनर से एक फ़ाइल की प्रतिलिपि बना रहा हूं और ssh जैसी किसी चीज़ का उपयोग करने के लिए क्रेडेंशियल्स से निपटना नहीं चाहता। यह कमांड एक फाइल को कॉपी करता है:

sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x

लेकिन यह एक उपनिर्देशिका संस्करण / लॉग बनाता है, मैं इससे बचना चाहता हूं ताकि यदि मैं डॉकटर कंटेनर में ये कर सकूं तो मुझे अच्छा होना चाहिए:

cd /var/log ; tar -cv ./file.log

मैं 2 कमांड चलाने के लिए कैसे कर सकता हूं?

जवाबों:


138

इसने उत्तर दिया: डॉक कमांड लाइन में एस्केप कैरेक्टर I ने इसे समाप्त किया:

sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x

तो यह काम करता है, एक प्रकार की बैश कमांड को एक पैरामीटर के साथ चलाने के लिए जो 2 कमांड मैं चलाना चाहता हूं।


बहुत बहुत धन्यवाद, इससे मुझे बहुत मदद
मिली

अगर आपको कमांड के अंदर डबल कोटेशन मिला है, तो आप ऐसा कर सकते हैं जैसे -c "cd /var/log; tar -cv \"$1\""कि फाइल पैरामीटर 1 पर है।
zed

28

अक्सर, कई आदेशों की आवश्यकता कार्यशील निर्देशिका को बदलने की है - जैसा कि ओपी के प्रश्न में है।

उसके लिए, अब docker के पास -wकार्यशील निर्देशिका को निर्दिष्ट करने का विकल्प है। वर्तमान मामले में

docker exec -w /var/log boring_hawking tar -cv ./file.log

वास्तव में उपयोगी है, यह जाने का रास्ता है।
टॉरटेलीजाइनर

यही वह है जिसकी तलाश में मैं हूं!
क्ले मिशेल

13

किसी अन्य व्यक्ति के लिए जो इस तरह से ठोकर खाता है और अधिक जटिल स्क्रिप्ट को निष्पादित करने के लिए कई आदेशों को निर्दिष्ट करने का एक अलग तरीका चाहता है:

cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF

जब आप अधिक जटिल स्क्रिप्ट निष्पादित करना चाहते हैं तो यह एक बहुत अच्छा पठनीय समाधान है। यह अधिक वोटों का हकदार है;)
स्लाव फोमिन II

मैं the input device is not a TTYइस विधि के साथ एक त्रुटि प्राप्त कर रहा हूं
रॉय शिलक्रॉट

--interactive, इस बात का ध्यान रखना चाहिए था, तो वैसा तो मैं कर रहा हूँ नहीं यकीन है कि क्या हो तुम ऐसा कैसे उपयोग कर रहे हैं पर व्यापक संदर्भ के बिना जा रहा है नहीं है।
जब्बनसन

6

अगर कोई और भयानक जवाब के लिए यहां आया था, लेकिन ओपी की मूल समस्या (ओपी के ओपी ..) को हल करने के लिए एक बेहतर तरीका चाहता है, तो डॉकटर कंटेनर से फाइल कॉपी करने के लिए, अब एक docker cpकमांड है जो ऐसा करेगा: https: //docs.docker.com/engine/reference/commandline/cp/


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