【发布时间】:2016-12-20 22:10:04
【问题描述】:
我想在从这个容器中构建一个 docker 容器时运行 certbot-auto 客户端,因此我需要端口 443 才能被外界访问。
有什么方法可以在构建 docker 映像时将端口绑定到主机?
【问题讨论】:
-
为什么在构建镜像而不是运行容器时需要绑定端口?
-
因为我希望 certbot 在构建映像时获取证书,而不是在运行容器时。
我想在从这个容器中构建一个 docker 容器时运行 certbot-auto 客户端,因此我需要端口 443 才能被外界访问。
有什么方法可以在构建 docker 映像时将端口绑定到主机?
【问题讨论】:
简短的回答,不。
该选项不作为 docker build 的一部分,并且构建不应该挂起等待外部连接。它们还应该被设计为在任何开发人员工作站、外部托管的构建服务器以及介于两者之间的所有东西上运行.
更长的答案,我认为你走错了路。将独特的容器特定数据注入到镜像中会创建一些与 docker 镜像的典型模式背道而驰的东西。与其尝试将证书注入到您的镜像中,不如让它作为容器入口点的一部分执行此操作,如果您需要持久性,请将结果存储在一个卷中,以便您可以在下次启动时跳过该步骤。
【讨论】:
--os-packages-only 没有解决这个问题。 G。它不安装 python 包。所以我在构建时运行它一次,如果它失败(并且我使用this nifty trick 让 docker 忽略错误)至少一切都设置好了。然后我在执行时再次运行它,它几乎立即生成证书。