मैं एक का उपयोग कर रहा हूँ docker कंटेनर मेरे चलाने के लिए go परीक्षण का उपयोग कर go test ./.... इसका उपयोग करके आसानी से प्राप्त किया जा सकता है docker exec <container> /bin/sh -c "go test ./...". दुर्भाग्य से go test ./... सभी उपनिर्देशिकाओं में चलता है और मैं एक (विक्रेता निर्देशिका) को बाहर करना चाहता हूं ।
इसके लिए सलाह दी गई समाधान निम्न आदेश का उपयोग कर रहा है: go test $(go list ./... | grep -v '<excluded>', किसी तरह यह मुझे निम्नलिखित परिणाम के साथ छोड़ देता है:
docker run golang:1.6.2-alpine /bin/sh -c "go test " (मैंने इसे रन और निष्पादन दोनों पर परीक्षण किया है, लेकिन वे शायद एक ही कोर का उपयोग करते हैं) ।
जब मैं कंटेनर में एसएसएच का उपयोग कर docker exec -it <container_id> /bin/sh और ठीक उसी कमांड को चलाएं, यह एक आकर्षण की तरह काम करता है ।
ऐसा लगता है कि शेल कमांड निष्पादित करने से डॉकर निष्पादन/रन गर्त में निहित किसी भी कमांड का समर्थन नहीं करता है $()?
हो सकता है कि आपका आदेश काम नहीं कर रहा हो जैसा कि आपने उम्मीद की थी कि एक सामान्य बैश गोचा के लिए धन्यवाद:
docker exec <container> /bin/sh -c "go test $(go list ./... | grep -v '<excluded>')"
आप जिस कमांड को चलाने की कोशिश कर रहे हैं, वह सबशेल का विस्तार करेगा $() अपने मेजबान पर क्योंकि यह दोहरे उद्धरण चिह्नों के अंदर है ।
प्रश्न टिप्पणियों में @क्यूंगएलएम द्वारा सुझाए गए अनुसार आपके आदेश को उद्धृत करके इसे हल किया जा सकता है ।
docker exec <container> /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
संपादित करें: थोड़ा डेमो
[wbarnwell@host ~]$ docker run -it --rm busybox /bin/sh -c '$(whoami)'/bin/sh: root: not found[wbarnwell@host ~]$ docker run -it --rm busybox /bin/sh -c "$(whoami)"/bin/sh: wbarnwell: not found
ठीक है, तो ध्यान दें कि’ $( । …) 'डॉकर कंटेनर के अंदर चलाने से पहले डबल कोट्स के अंदर आपके शेल द्वारा विस्तारित किया गया था । तो, समस्या आपकी वर्तमान निर्देशिका सामग्री से आ सकती है । क्या ‘डॉकर निष्पादन कंटेनर /बिन/एसएच-सी’ गो टेस्ट $(गो सूची ।/… / ग्रेप-वी " <बहिष्कृत>") " काम?