डॉकर: एप्ट-बर्तनों को स्थापित करने के मुद्दे


116

मैं apt-utilsडॉकर पर स्थापित करने की कोशिश कर रहा हूं क्योंकि जब मैं बस कर apt-get updateरहा था, मुझे त्रुटि मिल रही थी debconf: delaying package configuration, since apt-utils is not installed:। इसलिए मैंने स्थापित करने के लिए एक लाइन जोड़ी apt-utils(साथ में curl):

RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl

लेकिन, मुझे अभी भी वह त्रुटि मिल रही है जिससे मुझे विश्वास हो जाए कि मेरी आज्ञा काम नहीं करती। जब मैं छवि बनाने की कोशिश करता हूं तो नीचे मेरा आउटपुट होता है।

Step 5/12 : RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl
 ---> Running in 6e6565ff01bd
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:3 http://deb.debian.org jessie Release.gpg [2420 B]
Get:4 http://deb.debian.org jessie Release [148 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [624 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 6s (1541 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libapt-inst1.5
The following NEW packages will be installed:
  apt-utils libapt-inst1.5
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Need to get 537 kB of archives.
After this operation, 1333 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main libapt-inst1.5 amd64 1.0.9.8.4 [169 kB]
Get:2 http://deb.debian.org/debian/ jessie/main apt-utils amd64 1.0.9.8.4 [368 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 537 kB in 0s (557 kB/s)
Selecting previously unselected package libapt-inst1.5:amd64.
(Reading database ... 21676 files and directories currently installed.)
Preparing to unpack .../libapt-inst1.5_1.0.9.8.4_amd64.deb ...
Unpacking libapt-inst1.5:amd64 (1.0.9.8.4) ...
Selecting previously unselected package apt-utils.
Preparing to unpack .../apt-utils_1.0.9.8.4_amd64.deb ...
Unpacking apt-utils (1.0.9.8.4) ...
Setting up libapt-inst1.5:amd64 (1.0.9.8.4) ...
Setting up apt-utils (1.0.9.8.4) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
Removing intermediate container 6e6565ff01bd
 ---> f65e29c6a6b9
Step 6/12 : RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
 ---> Running in f5764ba56103
Detected operating system as debian/8.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/github_git-lfs.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
Removing intermediate container f5764ba56103
 ---> a4e64687ab73

यह क्या कारण है और मैं इसे कैसे ठीक कर सकता हूं? धन्यवाद!

जवाबों:


115

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

वैसे भी, यदि आप उपयुक्त बर्तन रखना चाहते हैं - इसे स्थापित करें। यह आपको एक बार यह चेतावनी देगा और फिर यह भविष्य के लिए अदृश्य हो जाएगा, क्योंकि आप अपने लॉग में देख सकते हैं, curlउस संदेश के बिना इंस्टॉल हो गए हैं।

ध्यान दें कि यदि आप एप्ट-बर्तनों को स्थापित करते हैं, तो आपको अन्य चेतावनियां मिलेंगी (क्योंकि अब इंस्टॉलर इंटरेक्टिव कॉन्फिग चला सकता है और वह प्रयास करेगा और विफल हो जाएगा)। उन लोगों को दबाने के लिए और उनके डिफॉल्ट्स के साथ इंटरेक्टिव कॉन्फिगरेशन वाले पैकेज हैं, इस तरह से चलाएंDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
क्या आप "इसे अनदेखा करना सुरक्षित है" टिप्पणी के लिए एक संदर्भ प्रदान कर सकते हैं?
जक

19
यह एक ज्ञात चेतावनी है, उदाहरण के लिए यहां देखें: github.com/phusion/baseimage-docker/issues/… (यह उन पैकेजों के साथ होता है जिनमें इंटरैक्टिव कॉन्फ़िगरेशन होता है जहां यह आपसे प्रश्न पूछता है - इसका मतलब है कि इंटरैक्टिव कॉन्फ़िगरेशन बंद कर दिया गया है, लेकिन यह डॉन नहीं है यहां तक ​​कि जरूरत नहीं है और वैसे भी चूक चाहते हैं, क्योंकि आप एक स्वचालित स्थापित कर रहे हैं)।
सिंह के

यह हमेशा एक आग्नेय चेतावनी नहीं है, यह आपके द्वारा इंस्टॉल किए जा रहे विशिष्ट पैकेज पर निर्भर करता है। कभी-कभी कॉन्फ़िगरेशन आवश्यक है और आपको या तो एक इंटरेक्टिव इंस्टॉल करना होगा या किसी अन्य तरीके से इसे प्रदान करना होगा जो इसे कॉन्फ़िगरेशन की आवश्यकता है।
केन विलियम्स

47

इंटरनेट पर खोज करने के बाद, मैंने कुछ विकल्पों का उल्लेख करने लायक पाया, जो हर बार DEBIAN_FRONTEND=noninteractiveसामने रखने के बजाय apt-get install -y {your-pkgs}:

वैकल्पिक 1: ARG DEBIAN_FRONTEND = गैर-सक्रिय

ARG इंस्ट्रक्शन एक वैरिएबल को परिभाषित करता है जिसे उपयोगकर्ता बिल्डर के पास बिल्ड-टाइम पास कर सकते हैं - dobuild-arg = flag का उपयोग करके। (संदर्भ: [ ])

समाधान की विशेषताएं:

  • ARG निर्देश केवल निर्माण के दौरान सेट किया गया है
  • विकल्प 'गैर-सक्रिय' केवल बिल्ड-टाइम के लिए डिफ़ॉल्ट मान के रूप में सेट किया गया है।
  • चूंकि यह एक तर्क है, इसलिए उदाहरण के लिए इस तर्क के लिए एक और मान पास करके इसे बदला जा सकता है docker build --build-arg DEBIAN_FRONTEND=newt

उदाहरण:

ARG DEBIAN_FRONTEND=noninteractive
...
RUN apt-get -yq install {your-pkgs}

वैकल्पिक 2: ऑन-द-फ्लाई

यह लियो के से समाधान है।

समाधान की विशेषताएं:

  • यह सेट किया जा सकता है कि इसकी आवश्यकता कहां है। अतः एक अच्छा महीन घोल।
  • यह एक विशिष्ट कमांड में एक अलग मूल्य में सेट किया जा सकता है, इसलिए यह विश्व स्तर पर सेट नहीं है।
  • कार्यक्षेत्र RUNअन्य निर्देशों को प्रभावित नहीं करेगा।

उदाहरण:

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install {your-pkgs}

वैकल्पिक 3: ENV DEBIAN_FRONTEND = गैर-सक्रिय

सेटिंग ENV DEBIAN_FRONTEND noninteractiveभी एक विकल्प होगा, लेकिन यह बहुत हतोत्साहित किया जाता है।

दूसरा तरीका यह होगा कि आप भीख मांगने के लिए तैयार हो जाएं और डॉकरीफाइल के अंत में इसे अनसेट कर दें।

समाधान की विशेषताएं:

  • ENV निर्देश निर्माण (अनुशंसित नहीं) के बाद पर्यावरण चर को बनाए रखेगा, इसके अलावा
  • यदि आप इसे डिफ़ॉल्ट मान पर सेट करना भूल जाते हैं, तो त्रुटि हो सकती है।
  • क्योंकि इसके साथ सेट किया गया है ENV, यह सभी छवियों और विरासत से निर्मित होगा, छवि से प्रभावी रूप से उनके व्यवहार को बदल देगा। (जैसा कि [ 1 ] में उल्लेख किया गया है ) उन लोगों का उपयोग करने वाले लोग सॉफ्टवेयर को अंतःक्रियात्मक रूप से स्थापित करते समय समस्याओं में चले जाते हैं, क्योंकि इंस्टॉलर कोई संवाद बॉक्स नहीं दिखाते हैं।
  • डिफ़ॉल्ट दृश्यपटल है DEBIAN_FRONTEND=newt(देखें [ ]), इसलिए इसे फ़ाइल के अंत में सेट करना होगा।

उदाहरण:

# Set for all apt-get install, must be at the very beginning of the Dockerfile.
ENV DEBIAN_FRONTEND noninteractive
...
# Non-interactive modes get set back.
ENV DEBIAN_FRONTEND newt

वैकल्पिक 4: RUN निर्यात DEBIAN_FRONTEND = गैर-संवेदी

समाधान की विशेषताएं:

  • वैकल्पिक 2 के समान
  • डिकॉप्लिंग करके, सामंजस्य पीड़ित है: क्यों इस चर का निर्यात होता है और यह क्या होता है (उपयुक्त-प्राप्त)।
  • कार्यक्षेत्र RUNअन्य निर्देशों को प्रभावित नहीं करेगा।

उदाहरण:

# Set the frontend and then install your package
RUN export DEBIAN_FRONTEND=noninteractive && \
    ...
    apt-get -yq install {your-pkgs} && \
    ...

और अधिक पढ़ें (संदर्भ)


2
मैंने "वैकल्पिक 2: ऑन-द-फ्लाई" का उपयोग किया: बहुत साफ और सुविधाजनक, मेरे पास अब कोई भ्रामक चेतावनी नहीं है
हेव-ग्वारिन

मैं वैकल्पिक 1 का चयन करता हूं और अभी भी चेतावनी प्राप्त करता हूं। मेरी डॉकफायर के साथ शुरुआत होती है FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractiveऔर मैं चला जाता हूंdocker build --no-cache -t node-10-16-2-plus-chrome .
मारेकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.