aptでパッケージをインストールするときにstdINを回避する
y
を何度も生成する専用の Unix コマンドがあることをご存知ですか?または、パッケージをインストールまたは更新するときに、apt パッケージ マネージャーを完全に非対話型にすることができますか?私は最近、いくつかのパッケージとマニュアル ページを Ubuntu Docker イメージにインストールするときにこのプロセスを実行したので、参考のために簡単な宣伝文句を書くことにしました.
これが私が始めたDockerfileです:
FROM ubuntu:latest
WORKDIR /app
RUN apt-get update && apt-get install -y \
openssl \
curl \
git \
vim \
dnsutils \
man-db
CMD ["bash"]
残念ながら、このコマンドは
dnsutils
がタイムゾーン地域に関する情報を集約しようとするため失敗します.このため、単に -y
を追加して、それを良いと呼ぶことはできませんでした.いくつかのグーグルの後、私は DEBIAN_FRONTEND=noninteractive
に出くわしました.これは、 apt
を使用してパッケージを更新またはインストールする際にゼロ操作を強制します.すべての質問に対するデフォルトの回答を受け入れます.これは、Dockerfiles、スクリプト、および他の何百万ものことで非常に役立つ可能性があります.したがって、これを念頭に置いて、これを環境変数として含めるように Dockerfile を更新しました.FROM ubuntu:latest
WORKDIR /app
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
openssl \
curl \
git \
vim \
dnsutils \
man-db
CMD ["bash"]
出来上がり!最初のステップは解決しました.
ただし、この Docker イメージには、デフォルトで
man
ページというもう 1 つのものが必要でした.これらを取得するには、unminimize
を実行してすべてのページを展開する必要があります.残念ながら、デフォルトでは unminimize -y
も unminimize --yes
も機能しませんでした.さらにグーグルで調べた後、信じられないほど単純な
yes
Unix バイナリに出くわしました.たとえば、端末で y
を実行するだけで、yes
が無限にスパムするのを見ることができます.この場合、
y
を追加して、すべてのデフォルトを受け入れ、パッケージのインストールを実行します.これは、RUN yes | unminimize
を何度もコマンドにパイプすることです.そしてちょうどそのように、いくつかのネットワーキング、マニュアルページ、およびデフォルトで動作するその他のものでスピンアップできる動作する Docker イメージがあります!最終的な Dockerfile は次のとおりです.
FROM ubuntu:latest
WORKDIR /app
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
openssl \
curl \
git \
vim \
dnsutils \
man-db
RUN yes | unminimize
CMD ["bash"]
そして、次のようなもので実行できます:
y
Reference
この問題について(aptでパッケージをインストールするときにstdINを回避する), 我々は、より多くの情報をここで見つけました https://dev.to/lucassha/circumvent-stdin-when-installing-packages-with-apt-1jhkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol