2015-04-19 6 views
9

मैं का उपयोग करने की कोशिश कर रहा हूं जिस तरह से आप docker run [APP_CONTAINER_NAME] [APP_OPTIONS] का उपयोग कर सकते हैं।मैं अपने डॉकराइज्ड प्रोग्राम में कमांड लाइन विकल्प कैसे भेज सकता हूं जिसे मैं "डॉकर-कंपोज़ अप" से शुरू करता हूं?

+0

मैं सच में समझ में नहीं आता क्योंकि Dockerfile में COMMAND entrypoint करने के लिए डिफ़ॉल्ट आर्ग के रूप में कार्य का उपयोग कर entrypoint को भेजने के लिए आदेश निर्दिष्ट प्रश्न - डॉकर-कंपोज़ में आप अपने तर्क डॉकर-compose.yml फ़ाइल में डालते हैं। क्या आपके लिए उस दृष्टिकोण में कोई समस्या है? –

+0

@AdrianMouat हाँ यह आदर्श नहीं है क्योंकि हर बार जब आप एक नया विकल्प भेजना चाहते हैं तो आपको docker-compose.yml को संशोधित करना होगा, पुनर्निर्माण और पुन: निर्माण करना होगा। जब मैं सेवा चलाता हूं तो मैं अपने प्रोग्राम में विकल्प भेज सकता हूं क्योंकि जब मैं मुख्य कंटेनर को 'डॉकर रन' के साथ चलाता हूं और इस व्यवहार को प्राप्त करने के लिए अपने डॉकरफ़ाइल में एंटरपॉइंट का उपयोग करता हूं तो मैं ऐसा करने में सक्षम हूं। – Donovan

उत्तर

2

docker run के रूप में परिभाषित किया गया है: के रूप में परिभाषित किया गया है

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 

जबकि docker compose run:

docker-compose run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 

दोनों मामलों में, अंतिम ARGS (हो सकता है जो ओ पी के सवाल का "APP_OPTIONS") होगा कंटेनर कमांड को पास किया जाना चाहिए।

ध्यान दें कि docker run विकल्प में से कुछ के रूप में इस्तेमाल किया जा सकता docker-compose run में है (एक -d झूठ, कंटेनर आदेश अलग से चलाने के लिए), लेकिन उन सभी को नहीं।

+2

क्या ARGS को डॉकर-कंपोज़ फ़ाइल में डालने का कोई तरीका नहीं है? कमांड लाइन पर उन्हें पास करना मेरे मामले में बहुत अस्थिर है। – dsteinkopf

+1

@dsteinkopf निश्चित: 'कमांड' के साथ (https://docs.docker.com/compose/compose-file/#command) आप छवि डिफ़ॉल्ट कमांड को ओवरराइड कर सकते हैं, जिससे आप छवि में परिभाषित कमांड को दोहराने की अनुमति दे सकते हैं, लेकिन बदल सकते हैं इसके पैरामीटर – VonC

3

डॉकर कंपोज़ का बिंदु यह है कि आपको अपने सभी कमांड लाइन स्विच याद रखने की ज़रूरत नहीं है।

यदि आप विभिन्न संदर्भों के लिए पर्यावरण चर बदलना चाहते हैं, तो मेरा सुझाव है कि आप रचना के लिए आधार common.yml फ़ाइल बनाएं। इसके बाद आप निर्देश के साथ common.yml फ़ाइल से विरासत में प्राप्त प्रत्येक अलग संदर्भ के लिए एक नई वाईएमएल फ़ाइल बना सकते हैं। इसके बाद आप -f संदर्भों के बीच स्विच करने के लिए docker compose पर ध्वज का उपयोग कर सकते हैं।

यह भी ध्यान दें कि यदि आप येल में एक चर बदलते हैं तो कंपोज़ को "पुनर्निर्माण" नहीं करना चाहिए, और यदि आप अपने लिए बेहतर काम करते हैं तो आप पर्यावरण चर के लिए बाहरी फ़ाइल का उपयोग कर सकते हैं।

1

आपको डॉकरफ़ाइल को देखने और APP_OPTIONS को प्रबंधित करने का तरीका देखने की आवश्यकता है। संभावना है कि एंटरपॉइंट विकल्प झंडे ले रहा है। इस मामले में,

command: [-flag1, -flag2] 

यह काम करता है जब दोनों निर्दिष्ट कर रहे हैं https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/

संबंधित मुद्दे