繁体   English   中英

如何在运行时使用唯一参数在 Dockerfile 中调用 RUN? (在 Docker 中为 NGINX 安装 Let's Encrypt。)

[英]How to call RUN in Dockerfile with unique parameters at runtime? (Installing Let's Encrypt for NGINX in Docker.)

我正在尝试创建一个 Dockerfile 来设置 Let's Encrypt。 我的基本 Docker Compose 项目包含以下三个文件:

  • 测试/docker-compose.yml
  • 测试/nginx/Dockerfile
  • 测试/letsencrypt/Dockerfile

Let's Encrypt 需要做两件事:(1)在验证域所有权时初始安装网站证书,以及(2)使用 cron 作业每 60-90 天定期更新证书。 证书的初始安装是 Dockerfile 的 RUN 命令的理想用例,因为它只在安装时发生一次,而定期证书更新是 Dockerfile 的 ENTRYPOINT 命令的理想选择,因为它需要持续运行。

但是,如果我在 Dockerfile 中包含完整的“RUN certbot certonly -d example.com ...”命令,它将无法构建,因为 Let's Encrypt 的 Certbot 应用程序需要一个正在运行的 Web 服务器来验证域名的有效性。 我想解决这个问题是在构建期间调用“RUN certbot --help”,然后在 NGINX 启动后在运行时调用“RUN certbot certonly -d example.com ...”。

我的 Docker Compose 文件组织如下:

services:
  nginx:
    ...
  letsencrypt:
    ...
    environment:
      CERTBOT_PARAMETERS: 'certonly -d example.com ...'
    depends_on:
      - nginx

我的让我们加密 dockerfile 是:

FROM ubuntu:bionic
ENV CERTBOT_PARAMETERS="--help"
...
# Install Certs
RUN certbot $CERTBOT_PARAMETERS
...
# Renew Certs
RUN apt-get -y install cron && \
  printf "30 */12 * * * root certbot renew > /proc/1/fd/1 2>/proc/1/fd/2\n" > /etc/cron.d/certbot && \
  chmod 644 /etc/cron.d/certbot && \
  crontab /etc/cron.d/certbot
ENTRYPOINT ["cron", "-f"]

这成功构建,但是当我调用“docker-compose up -d”时,一切都在运行,但没有安装证书。 如果我调用“docker exec -it CONTAINER_NAME /bin/bash”,然后在 docker 容器中手动运行“certbot certonly -d example.com ...”,那么证书就会被安装。

我认为在运行时调用我的 CERTBOT_PARAMETERS 环境变量存在问题。 也许它不能接受空格?

如何在运行时调用与构建时不同的 RUN 命令? 我应该使用 CMD 而不是 RUN 吗? 如果是这样,在Dockerfile的不同阶段调用CMD和ENTRYPOINT是否可以接受?

Dockerfile 中的RUN命令只会在构建镜像时执行。

CERTBOT_PARAMETERS -compose 文件中设置的CERTBOT_PARAMETERS环境变量仅在构建映像可用。

我不确定您是如何构建图像的,但是如果您想传递构建时可用的值,则需要使用构建参数,例如。 如果使用 docker-compose 查看文档 re ARGShttps : //docs.docker.com/compose/compose-file/#args

它们是只能在构建过程中访问的环境变量。

关于CMDENTRYPOINT ,您应该阅读它们的使用,因为它们不是相互排斥的,请参阅: https : ENTRYPOINT

它们控制映像在构建启动运行的命令,而RUN构建期间使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM