Liberty管理中心显示Docker服务器正在运行,但它未运行

Liberty管理中心显示Docker服务器正在运行,但它未运行,docker,websphere-liberty,autoscaling,Docker,Websphere Liberty,Autoscaling,我正在Ubuntu x64上使用Liberty 16.0.0.2。当我使用REST在另一台主机上部署远程Liberty Docker容器时,一切正常,但是当我手动停止这些远程容器(使用Docker stop xxx命令)时,即使重新启动Collective Controller,管理中心仍会显示这些容器正在运行 我已经为Docker容器定义了自动缩放,其中一些容器由于策略而停止,但一些真正正在运行的容器在管理中心显示为已停止。以下是正在运行的容器列表: $ docker ps CONTAINER

我正在Ubuntu x64上使用Liberty 16.0.0.2。当我使用REST在另一台主机上部署远程Liberty Docker容器时,一切正常,但是当我手动停止这些远程容器(使用
Docker stop xxx
命令)时,即使重新启动Collective Controller,管理中心仍会显示这些容器正在运行

我已经为Docker容器定义了自动缩放,其中一些容器由于策略而停止,但一些真正正在运行的容器在管理中心显示为已停止。以下是正在运行的容器列表:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fb59f94cd25b        liberty_img         "/opt/ibm/wlp/bin/ser"   41 minutes ago      Up 41 minutes                           liberty_container11
5fd2d5858f60        liberty_img         "/opt/ibm/wlp/bin/ser"   42 minutes ago      Up 42 minutes                           liberty_container10
98117dac4f69        liberty_img         "/opt/ibm/wlp/bin/ser"   42 minutes ago      Up 42 minutes                           liberty_container9
cdce71905081        liberty_img         "/opt/ibm/wlp/bin/ser"   8 hours ago         Up 3 hours                              liberty_container6
下面是管理中心向我展示的内容(注意容器5和11):

如何修复此问题,以便控制器发现我的Docker容器的正确状态


是的,但我没有看到任何有趣的内容。

因为您直接执行docker stop命令,所以集合成员基本上被杀死了,所以它不能向控制器报告它被停止了。同样,控制器报告该服务器的最后一个已知状态(由该服务器发布到控制器;成员将信息推送到控制器)。对于进程被终止的非docker Liberty成员(而不是“适当”的删除),同样的行为也是如此

如果docker成员被serverCommands mbean(通过Admin Center、swagger、java、jconsole、JMX REST连接器等)停止,或者通过“/wlp/bin./server stop{memberName}”命令停止,您不应该看到这个问题,因为该成员将首先向控制器报告它正在停止。由于它与您的环境有关,我要注意,如果您想通过管理中心停止/启动/重新启动自动缩放的服务器,首先需要从该成员中删除自动调用功能,或者将该成员置于维护模式


为了回到集合的正确状态,您只需等待成员的心跳超时三次(心跳的默认值为60秒,总共3分钟),之后控制器应将其标记为已停止(因为在约定的时间内没有收到他们的消息)。或者,您可以启动成员备份,然后“正确”停止它们(这可以通过管理中心完成,方法是将停止的成员置于维护模式(自动缩放),然后选择“重新启动”,这将启动成员备份,然后选择“停止”停止它。然后您可以删除维护模式).

由于您直接执行docker stop命令,集合成员基本上已被杀死,因此它无法向控制器报告它已被停止。同样,控制器报告该服务器的最后一个已知状态(由该服务器发布到控制器;成员将信息推送到控制器)。对于进程被终止的非docker Liberty成员(而不是“适当”的删除),同样的行为也是如此

如果docker成员被serverCommands mbean(通过Admin Center、swagger、java、jconsole、JMX REST连接器等)停止,或者通过“/wlp/bin./server stop{memberName}”命令停止,您不应该看到这个问题,因为该成员将首先向控制器报告它正在停止。由于它与您的环境有关,我要注意,如果您想通过管理中心停止/启动/重新启动自动缩放的服务器,首先需要从该成员中删除自动调用功能,或者将该成员置于维护模式


为了回到集合的正确状态,您只需等待成员的心跳超时三次(心跳的默认值为60秒,总共3分钟),之后控制器应将其标记为已停止(因为在约定的时间内没有收到他们的消息)。或者,您可以启动成员备份,然后“正确”停止它们(这可以通过管理中心完成,方法是将停止的成员置于维护模式(自动缩放),然后选择“重新启动”,这将启动成员备份,然后选择“停止”停止它。然后您可以删除维护模式).

需要注意的是,控制器反映了它所知道的成员状态。因此,如果一个成员加入,但随后无法与控制器通信,它将显示为已停止,因为控制器从未收到来自该成员的相反信息。就控制器而言,它是停止的


关于没有出现在AdminCenter中但在存储库中的成员,我怀疑存储库中的内容不完整。我相信还有另外一个问题,重复使用相同的容器名称会导致这样的行为。由于预先存在的数据,容器与控制器的连接实际上失败。你的情况可能吗

需要注意的是,控制器反映了它所知道的成员状态。因此,如果一个成员加入,但随后无法与控制器通信,它将显示为已停止,因为控制器从未收到来自该成员的相反信息。就控制器而言,它是停止的


关于没有出现在AdminCenter中但在存储库中的成员,我怀疑存储库中的内容不完整。我相信还有另外一个问题,重复使用相同的容器名称会导致这样的行为。由于预先存在的数据,容器与控制器的连接实际上失败。你的情况可能吗

我理解这种逻辑,但我相信在一段时间后,服务器必须被标记为已停止,这在我的情况下是不会发生的,即使在等待数小时之后也是如此。此外