मैं पर्यावरण चर का उपयोग करके कुछ अनुकूलित पैरामीटर के साथ कंटेनरों का एक सेट बनाने के लिए डॉकर और डॉकर-कंपोज़ का उपयोग करने की कोशिश कर रहा हूं - उदाहरण के लिए, मैं कंटेनर में विशिष्ट स्थान पर एक निर्देशिका माउंट करना चाहता हूं। यह विशिष्ट स्थान एक पर्यावरण चर में संग्रहीत किया जाता है और एक कमांड का उपयोग करके डॉकरफाइल में बनाया जाता है जैसे:

RUN mkdir $custom_location

मैं पैरामीटर को एक .env फ़ाइल में रखता हूं जो डॉकर-कंपोज़ फ़ाइल को पॉप्युलेट करता है।

एक बार कंटेनर चलने के बाद, printenv कमांड का उपयोग करके मैं देख सकता हूं कि env चर के स्थानांतरण ने काम किया है और मैं मैन्युअल रूप से कमांड चला सकता हूं mkdir $custom_location लेकिन dockerfile निर्माण प्रक्रिया के दौरान कमांड सफल नहीं रहा है।

Dockerfile का एक संक्षिप्त संस्करण इस तरह दिखता है:

FROM python:3.6.5 as my_base
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH

Docker-compose.yml का एक संक्षिप्त संस्करण इस तरह दिखता है:

  service:
    environment:
      - CUSTOM_PATH=${CUSTOM_PATH}
    build: ./Docker

मुझे जो त्रुटि मिल रही है वह इस तरह दिखती है:

चरण 20/20 : रन mkdir $CUSTOM_PATH ---> 437aa3f09dbb में चल रहा है mkdir: लापता ऑपरेंड अधिक जानकारी के लिए 'mkdir --help' आज़माएं। कमांड '/bin/sh -c mkdir $CUSTOM_PATH' ने एक गैर-शून्य कोड लौटाया: 1

यह क्यों होगा?

ENV चर सफलतापूर्वक चल रहे कंटेनर में हैं। printenv का उपयोग करके मैं उन्हें देख सकता हूं।

2
user3535074 12 मई 2018, 14:20

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने Dockerfile में ARG के साथ ENV का सफलतापूर्वक उपयोग कर सकते हैं। इसके लिए दस्तावेज़ देखें:

आप ARG या ENV निर्देश का उपयोग वेरिएबल निर्दिष्ट करने के लिए कर सकते हैं जो RUN निर्देश के लिए उपलब्ध हैं। ENV निर्देश का उपयोग करके परिभाषित पर्यावरण चर हमेशा एक ही नाम के एक ARG निर्देश को ओवरराइड करते हैं। इस Dockerfile पर ENV और ARG निर्देश के साथ विचार करें।

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER

तो, आपके मामले में यह होना चाहिए

FROM python:3.6.5 as my_base
ARG CUSTOM_PATH=<some default path if you wish>
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH

उसके बाद आप docker build --build-arg CUSTOM_PATH=/var/log/whatever . के साथ छवि बना सकते हैं और इसे काम करना चाहिए।

3
Alex Karshin 12 मई 2018, 16:48