Docker在构建期间发布端口

时间:2016-08-16 18:15:47

标签: docker build lets-encrypt

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

这可能吗?

1 个答案:

答案 0 :(得分:3)

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

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

一般来说,这是使用伴随的letsencrypt docker镜像完成的,有时称为sidekick。你基本上有你的应用程序(和它的容器)和一个letsencrypt容器,暴露一个nginx随后使用volume_from安装的卷,这个卷是letsencrypt容器放入获取的证书。这在图像启动期间发生,而不是在图像创建期间发生。您可以使用docker-compose文件来配置所需的任何内容。

E.g。你可以看看这里  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服务,其他任何内容都需要花钱或有限制。