Docker:apt-utilsのインストールに問題があります


109

apt-utilsDockerにインストールしようとし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

これは実際にはエラーではなく、無視しても問題ありません。apt-utilsを使用せずに多数のコンテナイメージを作成しました。この警告メッセージに関係なく、すべてのパッケージのインストールは正常に実行されます。

とにかく、apt-utilsが必要な場合は、インストールしてください。この警告は一度表示され、その後apt-getを呼び出すと消えます(自分のログで確認できるように、curlそのメッセージなしでインストールされます)。

注apt-utilsをインストールすると、他の警告が表示されます(これで、インストーラー対話型構成実行でき、それを試みて失敗するため)。それらを抑制し、デフォルトでインタラクティブな設定を持つパッケージを作成するには、次のようにapt-getを実行します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 = noninteractive

ARG命令は、ユーザーがビルド時に--build-arg =フラグを使用してdockerbuildコマンドでビルダーに渡すことができる変数を定義します。(参照:[ 6 ])

ソリューションの特徴:

  • ARG ディレクティブはビルド中にのみ設定されます
  • オプション「noninteractive」は、ビルド時のみのデフォルト値として設定されています。
  • これは引数であるため、この引数に別の値を渡すことで変更できます。 docker build --build-arg DEBIAN_FRONTEND=newt

例:

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

代替案2:オンザフライ

LeoKのソリューションです。

ソリューションの特徴:

  • 必要な場所に設定できます。したがって、優れたきめ細かいソリューションです。
  • 特定のコマンドで別の値に設定できるため、グローバルに設定されることはありません。
  • スコープはでありRUN、他のディレクティブには影響しません。

例:

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

代替案3:ENV DEBIAN_FRONTEND = noninteractive

設定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} && \
    ...

続きを読む(参考文献)


2
私は「Alternative2:On-the-fly」を使用しました:非常に清潔で便利で、混乱する警告はもうありません
herve-guerin

代替案1を選択しても、警告が表示されます。私のDockerfileはで始まり、FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractive実行しますdocker build --no-cache -t node-10-16-2-plus-chrome .
Marecky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.