我想在带有 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:
奇怪的是,当我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 时是否有更好的方法来避免交互式对话框?
要在没有交互式对话的情况下运行
dpkg
(在 Apt 等其他工具之后),您可以将一个环境变量设置为例如,您可以使用ARG在 Dockerfile 中设置它:
在 Ubuntu 18.04 上,我做了那个 Dockerfile:
TL&DR: 在您的 DockerFile 中
原因:
某些安装程序通过具有良好的前端使“安装”更容易。虽然在手动安装时这很好,但在自动安装期间这会成为一个问题。
您可以通过在您的环境字符串中放置以下内容来覆盖交互式安装。
干杯
您可以
DEBIAN_FRONTEND=noninteractive
在命令之前设置以避免ENV DEBIAN_FRONTEND=noninteractive
影响命令之后或子图像:您应该在安装之前
tzdata
设置您的时区: