अपने पहले उदाहरण में, आप -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'
स्रोत
2017-02-02 18:26:04
आप का प्रयास किया था: 'डोकर कार्यकारी [id]/bin/bash -c 'सीडी/var/www/के रूप में अन्य लोगों ने बताया है, कि आदेश बैश की तरह या नीचे दिए गए उदाहरण में, श एक खोल भी शामिल प्रोजेक्ट एंड कंपोज़र इंस्टॉल ' –
धन्यवाद दोस्त, मैंने आपकी टिप्पणी नहीं देखी लेकिन यह काम किया! –