Docker Swarm中STARTING状态Kafka容器无法被初始化容器连通问题
Docker Swarm中STARTING状态容器的网络可达性问题
这是Docker Swarm的预期行为。
在Swarm模式下,容器处于STARTING状态时,Swarm的网络层不会将其纳入服务的可用端点池,同时容器可能还未完全完成overlay网络的接入流程,导致同一Swarm集群内的其他容器无法通过服务名称或容器IP访问到它。
结合你的场景来看:你的Kafka容器因为健康检查需要检测hc主题是否存在,而这个主题又需要初始化容器来创建,形成了循环依赖——Kafka卡在STARTING状态无法被访问,初始化容器连不上Kafka就无法创建主题,进而Kafka永远通不过健康检查。当你修改健康检查让Kafka直接返回健康状态后,容器快速进入RUNNING (healthy)状态,Swarm会立刻将其加入网络路由列表,初始化容器就能正常连接并完成主题创建了。
Swarm的健康检查本质是用来判断容器是否就绪、能否处理请求的机制,只有容器通过健康检查进入健康状态,才会被Swarm视为可用实例,参与服务发现和流量转发。STARTING状态属于容器启动的过渡阶段,Swarm会限制该状态下容器的网络可达性,避免把请求发送到未就绪的实例上。
内容的提问来源于stack exchange,提问作者jonathan-dev
相关产品推荐
相关产品推荐

