डॉकरफाइल से निर्माण करते समय, डेबियन / उबंटू पैकेज डिबेंकफ गैर-सक्रिय स्थापित करने की अनुमति नहीं है


29

मैंने निम्नलिखित वातावरण सेट किया है ताकि apt-get install के दौरान कोई प्रश्न / संवाद न पूछा जाए:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

जो इसके बराबर है:

export DEBIAN_FRONTEND="noninteractive"

फिर भी, जब एक विशिष्ट डेबियन / उबंटू पैकेज इंस्टॉल (apt-get install का उपयोग करके) के अंत में, Dockerfile से एक छवि का निर्माण होता है, तो पैकेज कॉन्फिगरेशन debconf कहता है:

debconf: unable to initialize frontend: Noninteractive    # export DEBIAN_FRONTEND="noninteractive"
debconf: (Bareword "Debconf::FrontEnd::Noninteractive" not allowed while "strict subs" in use at (eval 35) line 3, <> line 1.)
debconf: falling back to frontend: Noninteractive
Subroutine BEGIN redefined at (eval 36) line 2, <> line 1.

वाह ... मुझे अपनी त्रुटि मिल गई। Dockerfile में ENV लाइनों में टिप्पणी करने का कोई तरीका नहीं है। मैं खुद को जवाब देने जा रहा हूं क्योंकि मुझे यकीन है कि यह कुछ अन्य लोगों को काटेगा ...

जवाबों:


57

यह किया जाना चाहिए सक्रिय रूप से हतोत्साहित सेट करने के लिए DEBIAN_FRONTENDकरने के लिए noninteractiveके माध्यम से ENV। कारण यह है कि निर्माण के बाद पर्यावरण चर बना रहता है, जैसे कि जब आप चलते हैं docker exec -it ... bash। यहां सेटिंग का कोई मतलब नहीं होगा।

दो अन्य संभावित तरीके हैं:

  1. इसे ARGकेवल इस रूप में सेट करें कि यह केवल बिल्ड के दौरान उपलब्ध है:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. आवश्यकता होने पर इसे ऑन-द-फ्लाई सेट करें।

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    

8
केवल वोट करने के लिए साइन अप किया गया
आंद्रे वेरलैंग

@ AndréWerlang: मुझे भी!
gvgramazio

27

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

डॉकरफाइल लाइन के साथ

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

चर:

DEBIAN_FRONTEND

पूरी तरह से इस पूरी लाइन शामिल होंगे:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

और करने के बराबर है:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'

मैं अपने प्रश्न को लगभग रद्द कर रहा था, लेकिन खोज इंजन और स्टैक एक्सचेंज के साथ, कुछ लोग शायद अपनी गलती यहाँ पाएंगे;


5
यदि यह वास्तविक उत्तर है, तो आपको इसे इस तरह स्वीकार करना चाहिए ताकि प्रश्न अनुत्तरित के रूप में सूचीबद्ध न हो।
एंडी शिन

4
इसका उपयोग करने के लिए हतोत्साहित किया जाता ENVहै DEBIAN_FRONTEND, देखें: github.com/docker/docker/issues/4032
k0pernikus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.