2014-12-20 7 views
7

मेरे मौजूदा सेटअप के रूप में मूल्यांकन किया जा रहा यह की तर्ज पर है:वर्कअराउंड चलाने डोकर करने के लिए "--env-फ़ाइल" आपूर्ति की फ़ाइल नहीं एक डोकर कंटेनर चलाने के लिए उम्मीद

  1. मैं एक main.env फ़ाइल मिल गया है:
# Main 
export PRIVATE_IP=\`echo localhost\` 
export MONGODB_HOST="$PRIVATE_IP" 
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
  1. मेरी सेवा फ़ाइल (नवोदय) में, मैं इस फ़ाइल स्रोत . /path/to/main.env

  2. फिर मैं docker run पर कई -e के साथ कॉलर के अंदर के प्रत्येक पर्यावरण चर के लिए कॉल करता हूं। docker run -e MONGODB_URL=$MONGODB_URL ubuntu bash

  3. मैं तो mongodb://localhost:27017/development बराबर करने के लिए कंटेनर के अंदर MONGODB_URL उम्मीद होती है: इस मामले में मैं की तरह कुछ कहेंगे। ध्यान दें कि वास्तविकता echo localhost को वास्तविक PRIVATE_IP के लिए अमेज़ॅन के एपीआई में curl द्वारा प्रतिस्थापित किया गया है।

यह थोड़ा सा अनावश्यक हो जाता है जब आप अपने कंटेनर को देने के लिए अधिक से अधिक पर्यावरण चर लगाना शुरू करते हैं। यहां देखने के लिए एक बढ़िया बिंदु है कि पर्यावरण चर को हल करने की आवश्यकता है रन टाइम, जैसे कि curl पर कॉल या अन्य एनवी चर के संदर्भ में।

समाधान मैं उपयोग करने के लिए उम्मीद कर रही थी है:

  1. इस जैसे एक --env-file पैरामीटर के साथ docker run बुला:
# Main 
PRIVATE_IP=\`echo localhost\` 
MONGODB_HOST="$PRIVATE_IP" 
MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
    फिर
  1. मेरी docker run कमांड को docker run --env-file=/path/to/main.env ubuntu bash में काफी छोटा कर दिया जाएगा (ध्यान में रखें कि मुझे लगभग 12-15 पर्यावरण चर मिलते हैं।

यह वह जगह है जहां मैंने अपनी समस्या को मारा, यह है कि कंटेनर के अंदर कोई भी चर अपेक्षित के रूप में हल नहीं होता है। इसके बजाय मैं अंत:

  • PRIVATE_IP = `गूंज localhost`
  • MONGODB_HOST =" $ PRIVATE_IP "
  • MONGODB_URL =" MongoDB: // $ MONGODB_HOST: 27017/विकास "

मैं निम्न तरीके से दरकिनार कर सकते हैं:

  1. main.env फ़ाइल सोर्सिंग।
  2. एक फ़ाइल बनाना जिसमें केवल वेरिएबल्स के नाम हैं (जिसका अर्थ है डॉकर पर्यावरण में उनके लिए खोज करेगा)।
  3. फिर इस फ़ाइल के साथ --env-file पर तर्क के रूप में docker run पर कॉल करें।यह काम करेगा लेकिन इसका मतलब होगा कि मुझे एक की बजाय दो फाइलों को बनाए रखने की आवश्यकता होगी, और वास्तव में वर्तमान स्थिति में सुधार के लिए यह बड़ा नहीं होगा।

मैं क्या पसंद करूंगा कि वेरिएबल्स अपेक्षित रूप से हल हो जाएं।

मैं मिल सकता है कि मेरी के सबसे करीब सवाल यह है: 12factor config approach with Docker

+0

मुझे लगता है कि देखा है कि आपका ' main.env' आपके वर्रों को शाब्दिक तारों के रूप में सेट कर रहा है। क्या आपने '' '' '' '' को हटाने का प्रयास किया है? आप डॉकर यहां कैसे शाब्दिक हैंडल करते हैं, इसके बारे में अधिक पढ़ सकते हैं: https://docs.docker.com/reference/builder/#env – jakenberg

उत्तर

3

दोनों --env और --env-file सेटअप चर के रूप में है और एकत्रित चर की जगह नहीं है।

Solomon Hykes रन टाइम और विभिन्न दृष्टिकोणों पर कंटेनर को कॉन्फ़िगर करने के बारे में वार्ता। जो आपके लिए काम करना चाहिए वह है कि मेजबान से कंटेनर में main.env को आरोहित करना और उसे सोर्स करना वॉल्यूम करना है।

+0

"इसे सोर्सिंग" का अर्थ है कि आपको बैश या कुछ चाहिए अन्य खोल और इसका मतलब है कि कंटेनर में बहुत सारे क्रॉफ्ट होने पर, मेरे मामले में, मैं सिर्फ निष्पादन योग्य चाहता हूं – Richard

0

एक ENV फ़ाइल बनाना जो कि कुंजी/मान जोड़े से अधिक कुछ नहीं है, सामान्य शेल आदेशों में संसाधित किया जा सकता है और पर्यावरण में जोड़ा जा सकता है। बाश-ए प्रगा को देखो।

0

आप क्या कर सकते हैं एक स्टार्टअप स्क्रिप्ट बनाएं जो कंटेनर शुरू होने पर चलाया जा सके। इसलिए आपकी वर्तमान डोकर फ़ाइल

From ... 
... 
ADD start.sh start.sh 
CMD ["start.sh"] 

को यह

From ... 
... 
CMD command 

बदलें यह कुछ ऐसा है कि आपका start.sh स्क्रिप्ट में निम्नलिखित है:

export PRIVATE_IP=\`echo localhost\` 
export MONGODB_HOST="$PRIVATE_IP" 
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development" 
command 
संबंधित मुद्दे