Docker: apt-utils yüklemede sorun yaşanıyor


110

Ben yüklemeye çalışıyorum apt-utilsBen sadece yaptığım zamanlarda çünkü Docker üzerinde apt-get updatehatasını başlamıştı: debconf: delaying package configuration, since apt-utils is not installed. Bu yüzden yüklemek için bir satır ekledim apt-utils(bununla birlikte curl):

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

Ama yine de, komutumun işe yaramadığına inanmamı sağlayan bu hatayı alıyorum. Görüntüyü oluşturmaya çalıştığımda çıktım aşağıdadır.

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

Buna ne sebep oluyor ve bunu nasıl düzeltebilirim? Teşekkür ederim!

Yanıtlar:


107

Bu aslında bir hata değildir ve bunu göz ardı etmek güvenlidir. Hiçbirinde apt-utils olmadan çok sayıda konteyner imajı oluşturdum ve bu uyarı mesajına bakılmaksızın, tüm paket kurulumları gerçekleşir ve normal şekilde çalışır.

Her neyse, apt-utils'e sahip olmak istiyorsanız - kurun. Size bu uyarıyı bir kez verecek ve daha sonra gelecekteki apt-get çağrıları için kaybolacaktır (kendi günlüğünüzde görebileceğiniz gibi, curlbu mesaj olmadan yüklenmiştir).

Eğer apt-utils'i yüklerseniz (şimdi yükleyici çünkü NOT, diğer uyarıları alacak edebilirsiniz interaktif yapılandırma çalıştırmak ve bu girişimi ve başarısız olur). Bunları bastırmak ve varsayılanları ile etkileşimli yapılandırmaya sahip paketlere sahip olmak için apt-get'i şu şekilde çalıştırınDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
"Görmezden gelmek güvenli" yorumuna bir referans verebilir misiniz?
Zak

19
Bu bilinen bir uyarıdır, örneğin şuraya bakın: github.com/phusion/baseimage-docker/issues/… (bu, size sorular sorduğu etkileşimli yapılandırmaya sahip paketlerde gerçekleşir - bu, etkileşimli yapılandırmanın atlandığı anlamına gelir, ancak Buna bile ihtiyacım yok ve yine de varsayılanları istemiyorsunuz çünkü otomatik kurulum çalıştırıyorsunuz).
Leo K

Her zaman göz ardı edilebilir bir uyarı değildir, yüklediğiniz belirli pakete bağlıdır. Bazen yapılandırma gereklidir ve ya etkileşimli bir kurulum yapmanız ya da ihtiyaç duyduğu yapılandırmayı sağlamak için başka bir yol bulmanız gerekir.
Ken Williams

44

İnternette arama yaptıktan sonra, her seferinde aşağıdakilerin DEBIAN_FRONTEND=noninteractiveönüne koymak yerine bahsedilmeye değer bazı alternatifler buldum apt-get install -y {your-pkgs}:

Alternatif 1: ARG DEBIAN_FRONTEND = etkileşimsiz

ARG komutu, kullanıcıların --build-arg = bayrağını kullanarak docker build komutuyla derleme zamanında oluşturucuya iletebilecekleri bir değişkeni tanımlar. (Referans: [ 6 ])

Çözüm özellikleri:

  • ARG yönerge yalnızca derleme sırasında belirlenir
  • 'Etkileşimli olmayan' seçeneği, yalnızca derleme zamanı için varsayılan değer olarak ayarlanır.
  • Bir argüman olduğundan, bu argüman için başka bir değer örn. İle iletilerek değiştirilebilir. docker build --build-arg DEBIAN_FRONTEND=newt

Misal:

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

Alternatif 2: Anında

Leo K.'nın çözümü.

Çözüm özellikleri:

  • İhtiyaç duyulan yere ayarlanabilir. Bu yüzden iyi bir ince taneli çözüm.
  • Belirli bir komutta farklı bir değere ayarlanabilir, bu nedenle genel olarak ayarlanmamıştır.
  • Kapsam, RUNdiğer yönergeleri etkilemeyecektir.

Misal:

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

Alternatif 3: ENV DEBIAN_FRONTEND = etkileşimsiz

Ayarlama ENV DEBIAN_FRONTEND noninteractiveda bir alternatif olabilir, ancak kesinlikle önerilmez.

Başka bir yol, yalvarırken ayarlamak ve Dockerfile'ın sonunda onu kaldırmaktır.

Çözüm özellikleri:

  • ENV direktif, derlemeden sonra ortam değişkenini koruyacaktır (önerilmez), dahası
  • Varsayılan değere geri ayarlamayı unutursanız hataya meyilli olabilir.
  • İle ayarlandığı için ENV, görüntüden oluşturulan tüm görüntüler ve içerikler tarafından miras alınacak ve davranışlarını etkin bir şekilde değiştirecektir. ([ 1 ] ' de bahsedildiği gibi ) Bu görüntüleri kullanan kişiler, yazılımları etkileşimli olarak kurarken sorunlarla karşılaşırlar çünkü yükleyiciler herhangi bir iletişim kutusu göstermezler.
  • Varsayılan ön uç DEBIAN_FRONTEND=newt([ 2 ] 'ye bakın, bu nedenle dosyanın sonunda ayarlanması gerekir.

Misal:

# 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

Alternatif 4: ÇALIŞTIR dışa aktar DEBIAN_FRONTEND = etkileşimsiz

Çözüm özellikleri:

  • Alternatif 2'ye oldukça benzer
  • Ayrıştırarak, uyum acı çekiyor: neden bu değişkenin ihracatı var ve neye ait olduğu (apt-get).
  • Kapsam, RUNdiğer yönergeleri etkilemeyecektir.

Misal:

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

Okumak için daha fazlası (referanslar)


2
"Alternatif 2: Anında" kullandım: çok temiz ve kullanışlı, artık kafa karıştırıcı uyarılarım yok
herve-guerin

Alternatif 1'i seçiyorum ve hala uyarı alıyorum. Dockerfile'ım ile başlıyor FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractiveve koşuyorumdocker build --no-cache -t node-10-16-2-plus-chrome .
Marecky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.