我正在构建一个Docker主机,我想对正在运行的容器进行无停机升级。现在,假设我只运行一个容器。
我构建了一个新映像并使用docker run -P ...
从中启动一个容器,以便为其分配随机主机端口。然后我可以使用Registrator之类的东西来自动更新Consul中的服务。现在,Consul有两个与图像名称对应的服务注册:旧容器和新容器。
我想更新我的nginx反向代理配置,使用Consul-Template (as described here)指向新容器的端口。 如何使Consul-Template仅获取最新容器的详细信息?
我考虑过的两个解决方案是:
CreateIndex
查找此服务的最新注册。但是,不知道如何通过CreateIndex进行Consul-Template排序。更新:我找到了一些有关如何更新/清除代码的文档:1,2,3。这可以在使用标记启动新容器之前运行的旧容器上完成。
这是解决此问题的最佳方法吗?
答案 0 :(得分:0)
我最近遇到了在 Consul Template 中获取最旧/最新实例的问题。我在网上找不到任何提示,所以我将答案留在这里。
我在 Consul 中发现的唯一允许区分实例年龄的属性是 CreateIndex。在 Consul 模板中使用它会很容易:
<button id="btn">start recording</button>
但不幸的是,服务函数返回的 HealthService 结构体并没有从 Consul 获取这个属性。我必须extend it才能使这个示例正常工作。