मेरे डॉकफाइल में , मैं उन चरों को परिभाषित करना चाहूंगा जिनका उपयोग मैं बाद में डॉकरफाइल में कर सकता हूं ।
मैं ENV
निर्देश से अवगत हूं , लेकिन मैं नहीं चाहता कि ये चर पर्यावरण चर रहे हों।
क्या डॉकरीफाइल दायरे में चर घोषित करने का कोई तरीका है ?
मेरे डॉकफाइल में , मैं उन चरों को परिभाषित करना चाहूंगा जिनका उपयोग मैं बाद में डॉकरफाइल में कर सकता हूं ।
मैं ENV
निर्देश से अवगत हूं , लेकिन मैं नहीं चाहता कि ये चर पर्यावरण चर रहे हों।
क्या डॉकरीफाइल दायरे में चर घोषित करने का कोई तरीका है ?
जवाबों:
आप उपयोग कर सकते हैं ARG
- https://docs.docker.com/engine/reference/builder/#arg देखें
ARG
अनुदेश एक चर है कि उपयोगकर्ताओं को साथ बिल्डर को निर्माण समय में पारित कर सकते हैं परिभाषित करता हैdocker build
आदेश का उपयोग--build-arg <varname>=<value>
झंडा। यदि कोई उपयोगकर्ता एक बिल्ड तर्क निर्दिष्ट करता है जो डॉकफाइल में परिभाषित नहीं किया गया था, तो बिल्ड एक त्रुटि उत्पन्न करता है।
मेरे ज्ञान के अनुसार, केवल ENV
" पर्यावरण प्रतिस्थापन " में उल्लिखित अनुमति देता है
पर्यावरण चर (
ENV
कथन के साथ घोषित ) का उपयोग कुछ निर्देशों में भी किया जा सकता है, क्योंकि चर को डॉकरीफाइल द्वारा व्याख्या किया जा सकता है।
डॉकएफ़िल की प्रत्येक पंक्ति के लिए बनाए गए प्रत्येक नए कंटेनरों में पुनर्विकसित होने के लिए उन्हें पर्यावरण चर होना चाहिए docker build
।
दूसरे शब्दों में, उन चरों की व्याख्या सीधे डॉकरीफाइल में नहीं की जाती है, लेकिन डॉकरीफाइल लाइन के लिए बनाए गए कंटेनर में, इसलिए पर्यावरण चर का उपयोग होता है।
इस दिन, मैं दोनों का उपयोग करता हूं ARG
( 1.10+ औरdocker build --build-arg var=value
) और ENV
। अकेले
उपयोग करने का ARG
मतलब है कि आपका वैरिएबल बिल्ड टाइम पर दिखाई देता है, रनटाइम पर नहीं ।
मेरा डॉकफाइल आमतौर पर होता है:
ARG var
ENV var=${var}
आपके मामले में, ARG
यह पर्याप्त है: मैं इसका उपयोग आमतौर पर http_proxy चर सेट करने के लिए करता हूं, जो कि बिल्ड समय पर इंटरनेट एक्सेस करने के लिए docker बिल्ड की जरूरत है।
तुम्हारे प्रश्न का उत्तर देने के लिए:
मेरे डॉकफाइल में, मैं उन चरों को परिभाषित करना चाहूंगा जिनका उपयोग मैं बाद में डॉकरफाइल में कर सकता हूं।
आप इसके साथ एक चर को परिभाषित कर सकते हैं:
ARG myvalue=3
समान वर्ण के आसपास रिक्त स्थान की अनुमति नहीं है।
और बाद में इसका उपयोग करें:
RUN echo $myvalue > /test
यदि चर एक ही RUN
निर्देश के भीतर फिर से उपयोग किया जाता है , तो कोई केवल एक शेल चर सेट कर सकता है। मैं वास्तव में पसंद करता हूं कि कैसे उन्होंने आधिकारिक रूबी डॉकरीफाइल के साथ संपर्क किया ।
RUN foo=$(date) && echo $foo
आप उपयोग कर सकते हैं ARG variable defaultValue
और रन कमांड के दौरान आप इस मान को अपडेट करके भी उपयोग कर सकते हैं --build-arg variable=value
। डॉक फ़ाइल में इन चरों का उपयोग करने के लिए आप उन्हें $variable
रन कमांड के रूप में संदर्भित कर सकते हैं ।
नोट: ये चर लिनक्स कमांडों के लिए उपलब्ध RUN echo $variable
होंगे और वे छवि में बने नहीं रहेंगे।