我想安装certbot在具有 Ubuntu 16.04 映像的 docker 环境中:
例如:
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:
奇怪的是,当我tzdata
在添加 ppa 之前安装时它可以工作:
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 之前或之后安装会有区别?- 有没有更好的方法可以避免安装 certbot 时出现交互式对话框?
答案1
如果要在不使用交互对话框的情况下运行dpkg
(在其他工具(如 Apt)之后),可以设置一个环境变量,如下所示
DEBIAN_FRONTEND=noninteractive
例如,你可以在 Dockerfile 中使用以下方式进行设置阿根廷:
ARG DEBIAN_FRONTEND=noninteractive
答案2
在 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....
答案3
总结: 在你的 DockerFile 中
ENV DEBIAN_FRONTEND=noninteractive
原因:
某些安装程序通过提供良好的前端使“安装”变得更容易。虽然这在手动安装时非常有用,但在自动安装期间这会成为一个问题。
您可以通过将以下内容放入环境字符串中来覆盖交互式安装。
干杯
答案4
你应该设置你的时区前安装tzdata
:
# Set timezone:
RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
# Install dependencies:
RUN apt-get update && apt-get install -y tzdata