Ubuntu 16.04イメージのあるdocker環境に certbot をインストールしたい:
例えば:
docker run -it ubuntu:16.04 /bin/bash
コンテナ内にいるとき、certbotをインストールする最も簡単な方法は、ユーザーの介入が必要なため機能しません。
apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot
問題はtzdata
であり、この対話型ダイアログで停止します。
Extracting templates from packages: 100%
Preconfiguring packages ...
Configuring tzdata
------------------
Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.
1. Africa 4. Australia 7. Atlantic 10. Pacific 13. Etc
2. America 5. Arctic 8. Europe 11. SystemV
3. Antarctica 6. Asia 9. Indian 12. US
Geographic area:
奇妙なことに、PPAを追加する前にtzdata
をインストールすると動作します。
apt-get update && \
apt-get install -y tzdata && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot
質問:
tzdata
をインストールするか、ppaを追加する前か後かで違いが出るのですか?対話型ダイアログなしでdpkg
(Aptなどの他のツールの背後で)を実行するには、1つの環境変数を次のように設定できます。
DEBIAN_FRONTEND=noninteractive
たとえば、 ARG を使用してDockerfileに設定できます。
ARG DEBIAN_FRONTEND=noninteractive
Ubuntu 18.04では、Dockerfileを実行しました。
ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
TL&DR: DockerFile内
ENV DEBIAN_FRONTEND=noninteractive
理由:
特定のインストーラーは、ニースのフロントエンドを持つことで「インストール」を簡単にします。これは手動インストールの場合は素晴らしいことですが、自動インストール中に問題になります。
環境文字列に以下を配置することにより、対話型インストールを上書きできます。
乾杯
コマンドの前にDEBIAN_FRONTEND=noninteractive
を設定すると、ENV DEBIAN_FRONTEND=noninteractive
が後のコマンドまたは子イメージに影響を与えることを回避できます。
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
tzdata \
&& rm -rf /var/lib/apt/lists/*