2015-11-05 6 views
6

मुझे एक आवश्यकता है कि एप्लिकेशन चलाने से पहले, इसके कुछ हिस्से को पर्यावरणीय चर को पढ़ने की आवश्यकता है। इसके लिए मैं निम्नलिखित डोकर फ़ाइलenvsubst कमांड एक कंटेनर में फंस गया

FROM nodesource/jessie:0.12.7 

# install gettext for envsubst 
RUN apt-get update 
RUN apt-get install -y gettext-base 

# cache package.json and node_modules to speed up builds 
ADD package.json package.json 
RUN npm install 

# Add source files 
ADD src src 

# Substiture value for backend endpoint env var 
RUN envsubst <src/js/envapp.js> src/js/app.js 

ADD node_modules node_modules 
EXPOSE 8000 
CMD ["npm","start"] 

ऊपर envsubst लाइन पढ़ने (पढ़ना चाहिए) एक env चर $MYENV और यह विकल्प है। लेकिन जब मैं फ़ाइल app.js खोलता हूं, तो यह खाली होता है। मैंने जांच की है कि कंटेनर में पर्यावरणीय चर मौजूद है और यह करता है। किसी भी कारण से इसका मूल्य पढ़ और प्रतिस्थापित नहीं किया जाता है? मैंने भी टीएच कंटेनर में एक ही कमांड की कोशिश की और यह काम करता है। जब मैं छवि

उत्तर

5

चलाता हूं तो यह केवल काम नहीं करता है क्योंकि यह $MYENV के लिए उपलब्ध नहीं है जब आप छवि चलाते हैं।

प्रत्येक रन कमांड अपने ही खोल पर चलता है।

डोकर दस्तावेजों से:

भागो (कमांड शेल में चलाया जाता है -/bin/श -c - खोल प्रपत्र)

आप अपने प्रोफ़ाइल के स्रोत के रूप में अच्छी तरह की जरूरत है, उदाहरण यदि $MYENV वातावरण चर .bashrc फाइल में उपलब्ध है के लिए, तो आप इस तरह अपने Dockerfile संशोधित कर सकते हैं:

RUN source ~/.bashrc && envsubst <src/js/envapp.js> src/js/app.js 
0

मैं था सुझाव है टी के बाद से आप नोड का उपयोग कर रहे हैं, आप npm envsub मॉड्यूल का उपयोग करते हैं।

यह मॉड्यूल अच्छी तरह से परीक्षण किया गया है और डॉकर के साथ दिमाग में विकसित किया गया है।

यह आपकी निर्भरताओं पर भरोसा करने की आवश्यकता से बचाता है जब आपके पास पहले से ही आपकी उंगलियों पर पूर्ण नोड शस्त्रागार होता है।

envsub रूप

envsub वर्णन किया गया है मैं पैकेज के लेखक हूँ Handlebars

के माध्यम से NodeJS

NodeJS फ़ाइल स्तर वातावरण चर प्रतिस्थापन प्रदान वैश्विक CLI मॉड्यूल के लिए envsubst है। मुझे लगता है कि आप इसका आनन्द उठाएंगे।

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