Docker 在构建期间发布端口

标签 docker build lets-encrypt

我正在使用 Docker 构建一个 nginx 环境。我想知道是否可以在构建期间公开发布端口(80、443),以便 letencrypt 可以在构建时运行(它需要对(中间)容器中的服务器进行网络访问)。

这可能吗?

最佳答案

我从未见过,我认为这是不可能的设计。

  • 您不应将 key 放在图像中
  • 您可能需要在 2 个月后重新确认许可证,并且需要重建整个镜像

  • 通常,这是使用配套的 Letencrypt docker 镜像完成的,有时称为 sidekick。您基本上拥有您的应用程序(及其容器)和一个letsencrypt 容器,公开一个卷,然后 nginx 使用 volume_from 挂载该卷。这个卷是 letencrypt 容器放置获取的证书。这发生在镜像启动期间,而不是镜像创建期间。您可以使用 docker-compose 文件来配置所需的任何内容。

    例如。你可以看看这里
    a) https://github.com/rancher/community-catalog/blob/master/templates/letsencrypt/2/docker-compose.yml
    b) 或 http://letsencrypt.readthedocs.io/en/latest/using.html#running-with-docker

    a) 允许您使用 ENV 变量定义您将需要的域,这将非常适合 docker-compose 方式,而不提供任何文件,如主机上的配置(保持可移植性)。

    您仍然可以将所有这些放在 nginx-server 上,但出于多种原因(例如需要配置 nginx ),这不是最佳实践。

    如果你想坚持“构建时间”,另一种方法是使用 DNS 验证模式,所以不是在端口上使用连接回验证,而是使用 DNS 条目验证,一些链接
    - https://github.com/lukas2511/letsencrypt.sh/wiki/Examples-for-DNS-01-hooks
    - a) 容器执行此操作

    对于这种情况,您可能希望选择 http://cloudflare.com - AFAIK 它是唯一一个可以免费访问无限域的 API 的 DNS 服务,其他任何东西要么花钱要么有限制。

    关于Docker 在构建期间发布端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981826/

    相关文章:

    powershell - Windows上用于Matlab编译器运行时的Docker构建(非交互式安装)

    docker - 使用k8s仿真运行e2e测试

    lets-encrypt - Letsencrypt如何使用--preferred-challenges

    docker - 当我们只有一个经纪人时,与我们有很多经纪人时,多个KAFKA_ADVERTISED_LISTENERS是什么意思?

    networking - 按特定顺序将新网卡添加到 Docker 容器

    android - 尝试声明 SELinux 类型时在 token ';' 重复声明类型

    java - Android Studio - 找不到tools.jar。请检查 X 是否包含有效的 JDK 安装

    android - Android Project如何具有不同的构建配置?

    https - Traefik 没有为新域获取 SSL 证书

    azure - 如何设置让 Azure Linux 服务 Web 应用程序加密