2017-02-02 7 views
6

मैं डॉकर निष्पादन में दो आदेश करने की कोशिश कर रहा हूं। Concretely, मुझे एक विशिष्ट निर्देशिका के अंदर एक आदेश चलाने के लिए है। मैं इस कोशिश की, butit काम नहीं किया:डॉकर निष्पादन के साथ दो कमांड निष्पादित करें

docker exec [id] -c 'cd /var/www/project && composer install' 

पैरामीटर -c का पता नहीं है।

docker exec [id] cd /var/www/project && composer install 

लेकिन आदेश composer installdocker exec आदेश के बाद क्रियान्वित किया जाता है: मैं भी इस की कोशिश की। मैं इसे कैसे कर सकता हूं?

+1

आप का प्रयास किया था: 'डोकर कार्यकारी [id]/bin/bash -c 'सीडी/var/www/के रूप में अन्य लोगों ने बताया है, कि आदेश बैश की तरह या नीचे दिए गए उदाहरण में, श एक खोल भी शामिल प्रोजेक्ट एंड कंपोज़र इंस्टॉल ' –

+0

धन्यवाद दोस्त, मैंने आपकी टिप्पणी नहीं देखी लेकिन यह काम किया! –

उत्तर

12

अपने पहले उदाहरण में, आप -c ध्वज docker exec पर ध्वज दे रहे हैं। यह एक आसान जवाब है: docker exec में -c ध्वज नहीं है।

आपके दूसरे उदाहरण में, आपका खोल इसे दो आदेशों में पार्स कर रहा है इससे पहले डॉकर इसे देखता है। यह इस के बराबर है:

if docker exec [id] cd /var/www/project 
then 
    composer install 
fi 

पहले, docker exec चलाया जाता है, और अगर यह बाहर निकालता 0 (सफलता), composer installस्थानीय स्तर पर को चलाने के लिए, डोकर के बाहर की कोशिश करेंगे।

आपको एक स्ट्रिंग का उपयोग करके docker exec पर एक ही तर्क के रूप में दोनों आदेशों को पास करना है। तब उन्हें कंटेनर के अंदर पहले तक एक खोल से व्याख्या नहीं किया जाएगा।

docker exec [id] "cd /var/www/project && composer install" 

हालांकि, जैसा कि आपने टिप्पणियों में उल्लेख किया है, यह भी काम नहीं करता है। ऐसा इसलिए है क्योंकि cd एक खोल बनाया गया है, और यह स्वयं पर मौजूद नहीं है। प्रारंभिक आदेश के रूप में इसे निष्पादित करने का प्रयास विफल हो जाएगा। तो अगला कदम इसे निष्पादित करने के लिए इसे खोलने के लिए है।

docker exec [id] "bash -c 'cd /var/www/project && composer install'" 

और अंत में, इस बिंदु पर && उद्धरण चिह्न के एक आंतरिक सेट में ले जाया गया है, इसलिए हम वास्तव में bash आदेश के आसपास उद्धरण ... आप उन्हें अगर आप पसंद करते ड्रॉप कर सकते हैं की जरूरत नहीं है।

docker exec [id] /bin/bash -c 'cd /var/www/project && composer install' 

बहुत धन्यवाद:

docker exec [id] bash -c 'cd /var/www/project && composer install' 
+0

हाय, मैंने आपके आदेश की कोशिश की और यह काम नहीं कर रहा है, यह दिखाया गया त्रुटि है: आरपीसी त्रुटि: कोड = 2 desc = oci रनटाइम त्रुटि: exec विफल: container_linux.go: 247: कंटेनर प्रक्रिया शुरू करने से "exec: \" cd/var/www/project && composer install \ ": stat cd/var/www/project && composer install: ऐसी कोई फ़ाइल या निर्देशिका नहीं है" स्पष्ट रूप से, निर्देशिका मौजूद है इसलिए मैं मैन्युअल रूप से एक्सेस कर सकता हूं। –

+0

@ एड्रिया हां, मैंने यहां 'सीडी' के बारे में सोचा नहीं था। मैंने जवाब अपडेट किया है, हालांकि यह आपके द्वारा पोस्ट किए गए उत्तर से कम या कम अब मेल खाता है (लेकिन यह क्यों काम करता है इसके बारे में अधिक स्पष्टीकरण के साथ)। –

0

के रूप में नेहाल जम्मू वाणी अपनी टिप्पणी में कहा, सही सिंटैक्स निम्नलिखित है!

1

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

अधिकतर आपको docker run कमांड से यह वाक्यविन्यास मिला जहां प्रविष्टि बिंदु /bin/sh पर सेट किया गया था। हालांकि, exec एंट्रीपॉइंट को छोड़ देता है, इसलिए आपको चलाने के लिए पूर्ण कमांड को शामिल करने की आवश्यकता है।

docker exec [id] /bin/sh -c 'cd /var/www/project && composer install' 
संबंधित मुद्दे