[docker] Docker : apt-utils 설치시 문제 발생

내가 apt-utils방금했을 때 apt-get update오류가 발생 했기 때문에 Docker 에 설치하려고합니다 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

이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까? 감사합니다!



답변

이것은 실제로 오류가 아니며 무시해도됩니다. apt-utils를 사용하지 않고 많은 수의 컨테이너 이미지를 빌드했으며이 경고 메시지와 관계없이 모든 패키지 설치가 정상적으로 진행되고 작동합니다.

어쨌든 apt-utils를 원한다면 설치하십시오. 이 경고를 한 번 제공 다음 나중에 apt-get을 호출 할 때 사라질 것입니다 (자신의 로그에서 볼 수 있듯이 curl해당 메시지없이 설치됨).

참고 apt-utils를 설치하면 다른 경고가 표시됩니다 (이제 설치 프로그램 대화 형 구성을 실행할 있고이를 시도하고 실패하기 때문입니다). 이를 억제하고 기본값으로 대화식 구성이있는 패키지를 가지려면 다음과 같이 apt-get을 실행하십시오.DEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


답변

인터넷을 통해 검색 한 후, 내가 대신 넣어 모든 시간, 언급 할 가치가 몇 가지 대안을 발견 DEBIAN_FRONTEND=noninteractive앞에 apt-get install -y {your-pkgs}:

대안 1 : ARG DEBIAN_FRONTEND = 비대화 형

ARG 명령어는 사용자가 빌드시 –build-arg = 플래그를 사용하는 docker build 명령으로 빌더에 전달할 수있는 변수를 정의합니다. (참조 : [ 6 ])

솔루션 특성 :

  • ARG 지시문은 빌드 중에 만 설정됩니다.
  • ‘noninteractive’옵션은 빌드 시간에만 기본값으로 설정됩니다.
  • 인수이기 때문에이 인수에 대해 다른 값을 예를 들어 전달하여 변경할 수 있습니다. docker build --build-arg DEBIAN_FRONTEND=newt

예:

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

대안 2 : 즉석

Leo K의 솔루션입니다.

솔루션 특성 :

  • 필요한 곳에 설정할 수 있습니다. 따라서 좋은 세분화 된 솔루션입니다.
  • 특정 명령에서 다른 값으로 설정할 수 있으므로 전역 적으로 설정되지 않습니다.
  • 범위는 RUN이며 다른 지시문에는 영향을주지 않습니다.

예:

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

대안 3 : ENV DEBIAN_FRONTEND = 비대화 형

설정 ENV DEBIAN_FRONTEND noninteractive도 대안이 될 수 있지만 매우 권장하지 않습니다.

또 다른 방법은 구걸 할 때 설정하고 Dockerfile의 끝에서 설정을 해제하는 것입니다.

솔루션 특성 :

  • ENV 지시문은 빌드 후 환경 변수를 유지합니다 (권장되지 않음).
  • 기본값으로 다시 설정하는 것을 잊으면 오류가 발생할 수 있습니다.
  • 로 설정되어 있기 때문에 ENV모든 이미지에 상속되고 이미지에서 빌드 된 내용이 포함되어 효과적으로 동작을 변경합니다. ([ 1 ] 에서 언급했듯이 ) 이러한 이미지를 사용하는 사람들은 소프트웨어를 대화 형으로 설치할 때 문제가 발생합니다. 설치 프로그램은 대화 상자를 표시하지 않기 때문입니다.
  • 기본 프런트 엔드는 DEBIAN_FRONTEND=newt([ 2 ] 참조 이므로 파일 끝에 설정해야합니다.

예:

# 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 export DEBIAN_FRONTEND = noninteractive

솔루션 특성 :

  • 대안 2 와 매우 유사합니다.
  • 디커플링으로 인해 응집력은 고통 스럽습니다.이 변수가 왜이 변수에 속해 있고 무엇에 속하는지 (apt-get)가 내보내집니다.
  • 범위는 RUN이며 다른 지시문에는 영향을주지 않습니다.

예:

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

더 읽을 거리 (참조)


답변