docker build certbot电子邮件输入

问题描述 投票:1回答:1

我正在尝试使用docker build来启动一个webapp。为了生成证书,我想使用certbot。但是,如果我只是把

RUN certbot --nginx,

我知道

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): Plugins selected: Authenticator nginx, Installer nginx
An unexpected error occurred:
EOFError.

是否可以在Dockerfile中提供此信息或忽略它?

docker certbot
1个回答
0
投票
RUN certbot -n -m ${EMAIL} -d ${DOMAINS} --nginx

我的建议不是在docker构建期间执行此操作,而是在容器启动时生成证书。这是因为letencrypt会尝试在您指定的域(可能不在您构建映像的位置)上连接到服务器。

但是,为了减少启动时间,您将希望跳过引导依赖项(但是您将需要安装这些依赖项)。为此,我将在Dockerfile中使用以下命令列出证书(这将确保正确安装依赖项),然后更改CMD(假设您正在使用nginx映像)

Dockerfile:

ARG [email protected]
ARG DOMAINS_ARG=example.com

ENV EMAIL=${EMAIL_ARG}
ENV DOMAINS=${DOMAINS_ARG}

RUN certbot --help
...
CMD ["sh", "-c", "certbot --no-bootstrap -n -m ${EMAIL} -d ${DOMAINS} --nginx", "&&", "nginx", "-g", "daemon off;"]

-n用于非交互模式--no-bootstrap是跳过依赖项的引导(安装python等)-m用于指定用于重要通知的电子邮件-d用于指定以逗号分隔的域列表

使用“ sh”,“-c”将在执行命令时调用外壳程序,因此您将获得类似于将环境变量替换为其值的行为的外壳程序。将值作为build args传递给build不会在容器启动时公开它们,这就是为什么然后将它们放入环境变量中的原因。从环境变量中使用它们的另一个好处是,您可以在不同的环境(开发,测试,阶段,产品等)中覆盖这些值。

© www.soinside.com 2019 - 2024. All rights reserved.