【发布时间】:2018-11-21 16:16:06
【问题描述】:
我目前在多个节点上运行Docker 版本 18.03.1-ce,构建 9ee9f40。我的设置是在 wildfly 集群中运行的 nginx 服务和多个 java restful API 服务。 对于我的 API 服务,我配置了一个简单的运行状况检查来确定我的 API 任务是否实际启动:
HEALTHCHECK --interval=5m --timeout=3s \
--retries=2 --start-period=1m \
CMD curl -f http://localhost:8080/api/healthcheck || exit 1
但即使使用HealthCheck,我的 nginx 有时也会出错 - 由于 API 仍未完全启动 - 无法服务休息请求。
到目前为止,我设法开始工作的唯一解决方案是手动将 --start-period 增加到更长的时间。
docker 服务load balancer 如何决定何时开始将请求路由到新服务?
使用 --start-period 设置更高的时间是目前防止负载均衡器将流量重定向到尚未准备好流量的任务的唯一方法还是我错过了什么? p>
我已经看到像 this 这样的“蓝绿色”部署答案,您可以在其中管理零停机时间,但我仍然希望这可以通过使用 docker 服务来完成。
【问题讨论】:
-
我猜您的健康检查localhost:8080/api/healthchck 没有给出您期望的响应。如果它完全响应,那么您的 api 已启动并正在运行似乎是合乎逻辑的,然后 docker 将开始将请求路由到它。
-
感谢您的回复。我认为问题不在于我的健康检查,而是 docker 服务负载均衡器将任务标记为正在运行并在该任务通过我的健康检查并被认为是“健康”之前开始重定向流量。我可能错了,我猜这就是问题所在。
-
不错的猜测,但本质上是错误的(除非有一个以前没有人注意到的奇怪错误)。阅读:stackoverflow.com/questions/43340147/…
-
谢谢,会解决这个问题和白鲸问题。
标签: docker docker-swarm