ডকার: অ্যাপটি ইউটিস ইনস্টল করার সমস্যা রয়েছে


109

আমি ইনস্টল করার চেষ্টা করছি apt-utilsকারণ যখন আমি শুধু করছিলাম Docker উপর 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

কী কারণে এটি ঘটছে এবং আমি কীভাবে এটি ঠিক করতে পারি? ধন্যবাদ!

উত্তর:


105

এটি আসলে ত্রুটি নয় এবং এটি এড়ানো নিরাপদ। আমি এগুলির যে কোনওটিতে এপটি ব্যবহার না করেই প্রচুর পরিমাণে কনটেইনার চিত্র তৈরি করেছি এবং এই সতর্কতা বার্তাটিকে বিবেচনা না করেই, সমস্ত প্যাকেজ ইনস্টলগুলি সাধারণভাবে কাজ করে।

যাইহোক, আপনি যদি অ্যাপটি ব্যবহার করতে চান - এটি ইনস্টল করুন। এটি আপনাকে এই সতর্কবার্তাটি একবার দিবে এবং তারপরে এটি ভবিষ্যতে অ্যাপ-গেটের অনুরোধগুলির জন্য অদৃশ্য হয়ে যাবে (আপনি নিজের লগে দেখতে পাচ্ছেন, curlসেই বার্তা ছাড়াই ইনস্টল হয়ে গেছে)।

দ্রষ্টব্য আপনি যদি অ্যাপটি-ব্যবহারগুলি ইনস্টল করেন তবে আপনি অন্যান্য সতর্কতা পাবেন (কারণ এখন ইনস্টলারটি ইন্টারেক্টিভ কনফিগারেশন চালাতে পারে এবং এটি চেষ্টা করবে এবং ব্যর্থ হবে)। এগুলিকে দমন করতে এবং তাদের ডিফল্টর সাথে ইন্টারেক্টিভ কনফিগারেশন রয়েছে এমন প্যাকেজগুলির জন্য, এ্যাপ-গেটটি চালানDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
আপনি কি "এটিকে উপেক্ষা করা নিরাপদ" মন্তব্যটির জন্য একটি রেফারেন্স সরবরাহ করতে পারেন?
জাক

19
এটি একটি জ্ঞাত সতর্কতা, উদাহরণস্বরূপ এখানে দেখুন: github.com/phusion/baseimage-docker/issues/… (এটি এমন প্যাকেজগুলির সাথে ঘটে যেখানে ইন্টারেক্টিভ কনফিগারেশন রয়েছে যেখানে এটি আপনাকে প্রশ্ন জিজ্ঞাসা করে - এর অর্থ ইন্টারঅ্যাকটিভ কনফিগারেশন বাদ দেওয়া হয় তবে আপনি ডন এমনকি এটির প্রয়োজন নেই এবং যে কোনও উপায়ে ডিফল্ট চান না, কারণ আপনি একটি স্বয়ংক্রিয় ইনস্টল চালাচ্ছেন)।
লিও কে

এটি সর্বদা অজ্ঞাত সতর্কতা নয়, এটি আপনি যে নির্দিষ্ট প্যাকেজটি ইনস্টল করছেন তার উপর নির্ভর করে। কখনও কখনও কনফিগারেশন প্রয়োজনীয় হয় এবং আপনাকে হয় একটি ইন্টারেক্টিভ ইনস্টল করতে হবে বা এটির প্রয়োজনীয় কনফিগারেশন সরবরাহ করার জন্য অন্য কোনও উপায় খুঁজে পেতে হবে।
কেন উইলিয়ামস

44

ইন্টারনেটে অনুসন্ধানের পরে, আমি প্রতিবারের DEBIAN_FRONTEND=noninteractiveসামনে না রেখে, উল্লেখ করার মতো কিছু বিকল্প খুঁজে পেয়েছি apt-get install -y {your-pkgs}:

বিকল্প 1: ARG DEBIAN_FRONTEND = অচিন্তনীয়

এআরজি নির্দেশাবলী একটি পরিবর্তনশীল সংজ্ঞায়িত করে যে ব্যবহারকারীরা বিল্ড-সময়ে বিল্ড কমান্ডের সাথে বিল্ড-কমান্ড - বিল্ড-আরগ = পতাকা ব্যবহার করে বিল্ডারের কাছে যেতে পারে। (রেফারেন্স: [ 6 ])

সমাধান বৈশিষ্ট্য:

  • ARG নির্দেশটি কেবল বিল্ডের সময় সেট করা থাকে
  • 'নন-ইন্টারেক্টিভ' বিকল্পটি কেবল বিল্ড-টাইমের জন্য ডিফল্ট মান হিসাবে সেট করা আছে।
  • যেহেতু এটি একটি আর্গুমেন্ট, উদাহরণস্বরূপ এই আর্গুমেন্টের জন্য অন্য মানটি পাস করে এটি পরিবর্তন করা যেতে পারে docker build --build-arg DEBIAN_FRONTEND=newt

উদাহরণ:

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

বিকল্প 2: অন ফ্লাই

এটি লিও কে থেকে সমাধান is

সমাধান বৈশিষ্ট্য:

  • এটি প্রয়োজন যেখানে সেট করা যেতে পারে। সুতরাং একটি ভাল সূক্ষ্ম সমাধান।
  • এটি একটি নির্দিষ্ট কমান্ডে একটি পৃথক মান হিসাবে সেট করা যেতে পারে, তাই এটি বিশ্বব্যাপী সেট করা হয় না।
  • সুযোগটি হ'ল RUNএবং অন্যান্য নির্দেশকে প্রভাবিত করবে না।

উদাহরণ:

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

বিকল্প 3: ENV DEBIAN_FRONTEND = নিরবচ্ছিন্ন

সেটিং ENV DEBIAN_FRONTEND noninteractiveবিকল্পও হবে তবে এটি অত্যন্ত নিরুৎসাহিত।

আর একটি উপায় হ'ল ভিক্ষাবৃত্তিতে সেট করা এবং ডকফায়িলের শেষে এটি আনসেট করা।

সমাধান বৈশিষ্ট্য:

  • ENV নির্দেশনাটি বিল্ডের পরে পরিবেশ পরিবর্তনশীল বজায় রাখবে (প্রস্তাবিত নয়), তদ্ব্যতীত
  • যদি আপনি এটিকে ডিফল্ট মানটিতে আবার সেট করতে ভুলে যান তবে এটি ত্রুটির প্রবণ হতে পারে।
  • এটি সেট করা থাকার কারণে এটি ENVচিত্র থেকে তৈরি সমস্ত চিত্র এবং পাত্রগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হবে, কার্যকরভাবে তাদের আচরণ পরিবর্তন করে। ([ ] যেমন উল্লিখিত হয়েছে ) ইন্টারেক্টিভভাবে সফ্টওয়্যার ইনস্টল করার সময় এই চিত্রগুলি ব্যবহার করা লোকেরা সমস্যায় পড়ে, কারণ ইনস্টলাররা কোনও ডায়ালগ বাক্স দেখায় না।
  • ডিফল্ট সীমানা হ'ল 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: রুন রফতানি DEBIAN_FRONTEND = অবিচ্ছিন্ন

সমাধান বৈশিষ্ট্য:

  • বেশিরভাগ বিকল্প 2
  • ডিকপলিংয়ের মাধ্যমে, সংহতি ভুগছে: কেন এই পরিবর্তনশীলটির রফতানি হয় এবং এটি কী (এপেট-গেট) এর সাথে সম্পর্কিত।
  • সুযোগটি হ'ল RUNএবং অন্যান্য নির্দেশকে প্রভাবিত করবে না।

উদাহরণ:

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

আরও পড়ুন (তথ্যসূত্র)


4
আমি "বিকল্প 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 .
চলেছি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.