2017-10-29 8 views
2

私はabcdeを使ってCDをリッピングするためのDockerイメージを作成しようとしています。尋ねることによって(メール接続の種類を設定することを設定するには、Dockerコマンドでキーボードのやり取りが必要です

FROM ubuntu:17.10 
MAINTAINER Graham Nicholls <[email protected]> 
RUN apt update && apt -y install eject vim ruby abcde 
... 

残念ながら、「ABCDE」のパッケージは、メールクライアントで引っ張る(わからない)、とのapt試行: はここDockerfileの関連部分ですスマート/リレーなど)。

ドッカーを実行すると、stdinから読み取るように見えないため、ドッカープロセスにリダイレクトできません。

私は、aptで--nodepsを使用しようとしました(そして、aptをapt-getに置き換えました)。残念ながら--nodepsは、サポートされているオプションとリターンする無もはや思わない:

E:ラインオプションが--nodepsコマンドを

誰かが応答で期待使うことを提案している他のオプションとの組み合わせで理解されていません私はむしろ避けたいと思う同様の質問に。これは「Googleには難しい」問題だと思われます。何も見つかりません。

したがって、aptの設定への回答を渡す方法、またはaptがメールクライアントを引き込まないようにする方法があります。これは良いでしょう。私はcddbに更新を送るつもりはありません。

+2

通常dockerビルド、 'apt'インストールは非対話型です(ttyがないため)。 'DEBIAN_FRONTEND = noninteractive'(例えば、パッケージがインストールされる前にDockerfileの' ENV'ステートメントを介して)を設定すると、パッケージはプロンプトを表示しなくなりますか? – larsks

+0

@ larsks-ありがとうが、悲しいことに違いはありません。ああ、ハングアップ - ちょうどあなたのコメントを正しく読んでください。 Dockerfileに入れてみましょう...どの作品なので、ありがとう!しかし、一般的に答えはどうでしょうか?これはaptコマンドには非常に便利ですが、一般的にファイルから回答をリダイレクトする必要があるのはどうですか? –

+0

@ダンウー:編集に感謝しますが、私は誰とも議論していません - 別のリッパーが一般的な質問に対処していないことを示唆しています。 –

答えて

3

ドッキングウィンドウコンテナにaptのパッケージをインストールするための一般的なテンプレートは以下のようになります。

「非対話型」の値が任意のプロンプトを削除すると、それを実行する
RUN apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
    eject \ 
    vim \ 
    ruby \ 
    abcde \ 
&& apt-get clean \ 
&& rm -rf /var/lib/apt/lists/* 

ENVとして設定したくないのは、コンテナ内で実行するインタラクティブコマンドにも影響するためです。

終了時にパッケージデータベースをクリーンアップして、レイヤーサイズを縮小し、後の手順で古いキャッシュされたパッケージデータベースを再利用しないようにすることもできます。

no-install-recommendedsオプションを使用すると、追加の推奨パッケージではなく、必要な依存関係のみをインストールすることで、インストールされるパッケージの数を減らすことができます。これは私のためにルートファイルシステムのサイズを半減させます。


デフォルト以外の設定をパッケージに渡す必要がある場合は、debconfを使用します。最初に対話形式でインストールし、保存するオプションを入力します。 debconf-utilsをインストールします。次に、実行:

debconf-get-selections | grep "${package_name}" 

そのパッケージに設定したすべてのオプションを表示します。

RUN echo "postfix postfix/main_mailer_type  select No configuration" \ 
    | debconf-set-selections \ 
&& apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
.... 

をしたり、中にコピーしたファイルにあなたの選択を保存:あなたは、パイプあなたを実行する前に、あなたのコンテナ内debconf-set-selectionsにこれらのオプションは、例えば、インストールできるの文脈で、

COPY debconf-selections/
RUN debconf-set-selections </debconf-selections \ 
&& apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
.... 
+0

ありがとうございました - 私はaptがapt-getに取って代わることを読んでいます(私は確かに良い理由があると確信しています)。おそらく、このアドバイスはまだすべて適用されますか?また、おそらくENV変数を設定することは、 "DEBIAN_FRONTEND"を尊重するコマンドにのみ影響しますか?しかし、私はコマンドだけの変数を設定する形式を使用する方が好きです。 PS適切なクリーンで良いキャッチ。 –

+0

私の古い 'apt-get'習慣は大変に死にます、' apt'がこれを変更したかどうかチェックしませんでしたが、私はそれを疑っています。 'ENV'は、画像をビルドした後にコンテナ内で実行するインタラクティブコマンドを含む、その変数を使用するコマンドに影響します。ビルド後にこの変数を定義することは、イメージのユーザーにとっては直感的ではありません。 – BMitch

+0

私はシャワーにいたばかりでしたが、ENVを使用することで、コンテナ内にvarが設定されていたことが分かりました。これはあなたが言うように、予期せぬ結果をもたらすでしょう。 –

関連する問題