यदि मैं एक शेल स्क्रिप्ट को ENTRYPOINT के रूप में निष्पादित करना चाहता हूं और शेल स्क्रिप्ट निष्पादन पूर्ण होने पर डॉकर कंटेनर में प्रवेश करना चाहता हूं।
मेरे डॉकरफाइल के अंत में निम्नलिखित पंक्तियां हैं:
WORKDIR artifacts
ENTRYPOINT ./my_shell.sh
जब मैं इसे निम्न आदेश के साथ चलाता हूं, तो यह शेल स्क्रिप्ट निष्पादित करता है लेकिन डॉकर कंटेनर में प्रवेश नहीं करता है।
docker run -it testub /bin/bash
क्या कोई मुझे यहां बता सकता है अगर मुझे यहां कुछ याद आ रहा है?
उत्तर:
जवाब के लिए 0 № 1दो विकल्प हैं जो नियंत्रित करते समय कंटेनर चलाता है, एंट्रीपॉइंट (ENTRYPOINT
) और आदेश (CMD
)। वे निम्नलिखित तर्क का पालन करते हैं:
- यदि प्रविष्टि बिंदु परिभाषित किया गया है, तो यह अतिरिक्त तर्क के रूप में शामिल कमांड के मान के साथ चलाया जाता है।
- यदि प्रविष्टि बिंदु परिभाषित नहीं किया गया है, तो आदेश स्वयं ही चलाया जाता है।
आप छवि में परिभाषित एक या दोनों मानों को ओवरराइड कर सकते हैं। docker run -it --entrypoint /bin/sh testub
इसके बदले / bin / sh चलाएगा ./my_shell.sh
, प्रवेश बिंदु ओवरराइडिंग। तथा docker run -it testub /bin/bash
कंटेनर शुरू करने के साथ, आदेश को ओवरराइड करेगा ./my_shell.sh /bin/bash
.
त्वरित जवाब चलाने के लिए है docker run -it --entrypoint /bin/bash testub
और वहां से, अपना लात मारो ./my_shell.sh
। अद्यतन करने के लिए एक बेहतर समाधान है ./my_shell.sh
किसी भी अतिरिक्त पैरामीटर की जांच करने के लिए और स्क्रिप्ट के अंत में निम्नलिखित के साथ उन्हें चलाने के लिए:
if [ $# -gt 0 ]; then
exec "$@"
fi