Dockerfile'den oluştururken, Debian / Ubuntu paketi debconf kurulumunu gerçekleştirmez. Etkileşimsiz yüklemeye izin verilmez.


29

Apt-get install sırasında soru / diyalog sorulmayacak şekilde aşağıdaki ortamı belirledim:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Hangi eşdeğerdir:

export DEBIAN_FRONTEND="noninteractive"

Bununla birlikte, bir Dockerfile'den bir görüntü oluştururken, belirli bir Debian / Ubuntu paket kurulumunun (apt-get install kullanarak) sonunda, paket yapılandırma debconf şöyle diyor:

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.

Vay ... Hatamı buldum. Dockerfile'deki ENV satırlarına yorum yazmanın bir yolu yoktur. Başkalarını ısırtacağından emin olduğum için kendime cevap vereceğim.

Yanıtlar:


57

Edilmelidir aktif cesaretini ayarlamak için DEBIAN_FRONTENDiçin noninteractiveüzeri ENV. Bunun nedeni, ortam değişkeninin derlemeden sonra, örneğin siz çalıştırdığınızda devam etmesidir docker exec -it ... bash. Ayar burada anlamlı olmaz.

Başka iki olası yol var:

  1. ARGBu, yalnızca derleme sırasında kullanılabileceği şekilde ayarlayın :

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. Gerektiğinde anında harekete geçirin.

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

8
oy kullanmak için kaydoldu
André Werlang

@ AndréWerlang: Ben de!
gvgramazio

27

Tamam, sorunun kaynağı şuydu: Dockerfiles'te ENV satırlarına yorum yapmak için # kullanamazsınız çünkü "env değişkeninin sonu" diyecek bir sınırlayıcı yok, değişken adından sonra gelen her şey ve hemen ardından boşluk olacak değişken.

yani Dockerfile hattıyla:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Değişken:

DEBIAN_FRONTEND

tam olarak bu çizginin tamamını içerecek:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

ve yapmaya eşdeğerdir:

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

Neredeyse sorumu iptal ediyordum, ancak arama motorları ve Stack Exchange ile bazı insanlar hatalarını bir gün burada bulacaklar ;-)


5
Asıl cevap buysa, soruyu artık cevapsız olarak listelenmemiş olarak kabul etmelisiniz.
Andy Shinn,

4
Bunun için kullanmak ENViçin tavsiye edilir DEBIAN_FRONTEND, bakınız: github.com/docker/docker/issues/4032
k0pernikus
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.