सीएमडी में पर्यावरण चर का उपयोग करें


84

क्या मैं अपने सीएमडी के श्लोक में पर्यावरण चर का उपयोग डॉकरीफाइल में कर सकता हूं?

मैं कुछ इस तरह करना चाहता हूं:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

जहाँ $ MEMCACHE_11211_TCP_ * मेरी docker runकमांड के --link पैरामीटर के शामिल होने से स्वचालित रूप से सेट हो जाएगा । और $ ARG रनटाइम पर उपयोगकर्ता द्वारा कॉन्फ़िगर किया जा सकता है, शायद "-e" पैरामीटर द्वारा?

यह मेरे लिए काम नहीं कर रहा है, ऐसा लगता है कि यह सचमुच स्ट्रिंग "$ एआरजी" के माध्यम से गुजर रहा है।

जवाबों:


59

इस उत्तर में थोड़ी देर हो सकती है। लेकिन CMDआप किस तरह से तर्कों को लिखते हैं, इसके आधार पर पर्यावरण की थोड़ी अलग व्याख्या की जाती है। यदि आप CMDएक स्ट्रिंग के रूप में पास करते हैं (किसी सरणी के अंदर नहीं), तो इसे निष्पादन के बजाय एक शेल के रूप में लॉन्च किया जाता है। Https://docs.docker.com/engine/reference/builder/#cmd देखें ।

आप CMDशेल के रूप में चलाने के लिए सरणी सिंटैक्स के बिना कोशिश कर सकते हैं :

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT


11

दोनों एंडीज के पास यह सही था। JSON सिंटैक्स प्रविष्टि बिंदु को बायपास करता है। जब आप उनके उदाहरण के रूप में सीएमडी का उपयोग करते हैं, तो इसे डिफ़ॉल्ट एंट्रीपॉइंट के लिए एक तर्क के रूप में माना जाता है: /bin/sh -cजो एनवायरनोन चर की व्याख्या करेगा।

डॉकर किसी भी स्थिति में सीएमडी में चर का मूल्यांकन नहीं करता है। पूर्व में, कमांड को सीधे कहा जाता है ताकि कुछ भी व्याख्या न हो, बाद में, चर की व्याख्या की जाती है sh


7

मैं यह नहीं बोल सकता कि इसे कैसे काम करना चाहिए , लेकिन मुझे लगता है कि अगर आप इसे शेल स्क्रिप्ट कहते हैं, उदाहरण के लिए CMD runmyserver.sh, तो शेल चरों की व्याख्या तब तक टाल दी जाएगी जब तक कि सीएमडी वास्तव में नहीं चलेगा।

इसलिए कोशिश करें

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

एक शेल स्क्रिप्ट के रूप में?

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