Docker在构build期间发布端口

我使用Docker来构build一个nginx环境。 我想知道是否可以公开发布端口(80,443),所以letsencrypt可以在构build时运行(它需要networking访问(中间)容器中的服务器)。

这可能吗?

我从来没有见过,我认为这是不可能的devise。

  • 你不应该把密钥放在图像中
  • 您可能需要在2个月后重新确保许可证,并需要重新构build整个图像

一般来说,这是通过使用伴随letsencrypt docker镜像来完成的,有时也称为sidekick。 你基本上有你的应用程序(和它的容器)和一个letsencrypt容器,公开了一个卷,然后nginx使用volume_from这个卷装载的是letsencrypt容器放入提取的证书。 这发生在图像启动过程中,而不是在图像创build过程中。 您使用docker-compose文件来configuration所需的任何东西。

例如,你可以看看这里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)可以让你使用ENVvariables定义你将需要的域名,这将很好地套用docker-compose的方式,不会提供任何像主机上的configuration(保持便携)的文件。

你仍然可以将所有这些放在nginx服务器上,但是由于许多原因(例如需要configurationnginx),它并不是最佳实践。


如果你想坚持“build立时间”,一个替代scheme是使用DNSvalidation模式,所以不是validation在端口上使用连接,而是validation使用DNS条目,一些链接 – https:// github.com/lukas2511/letsencrypt.sh/wiki/Examples-for-DNS-01-hooks – a)容器做到这一点

对于这种情况下,你可能想selecthttp://cloudflare.com – AFAIK它是唯一的DNS服务与无限的域名免费的API访问,其他任何要么花钱或有限制。