我在 Ubuntu x64 上使用 Liberty 16.0.0.2。当我使用 REST 在另一台主机上部署远程 Liberty Docker 容器时,一切正常,但是当我手动停止这些远程容器(使用 docker stop xxx
命令)时,管理中心仍然显示这些容器正在运行,即使在重新启动集体 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):
如何解决这个问题,以便 Controller 发现我的 Docker 容器的正确状态?
messages.log file is attached ,但我在那里看不到任何有趣的东西。
最佳答案
由于您直接执行 docker stop 命令,因此集体成员基本上被杀死了,因此它不会向 Controller 报告它正在被停止。因此, Controller 报告该服务器的最后一个已知状态(由该服务器发布到 Controller ;成员将信息推送到 Controller )。对于进程被终止(而不是“正确”删除)的非 docker Liberty 成员来说,同样的行为也是如此。
如果 docker 成员被 serverCommands mbean(通过 Admin Center、swagger、java、jconsole、JMX REST 连接器等)或通过 '/wlp/bin ./server stop {memberName}' 命令停止,则不应看到这个问题,因为成员将首先向 Controller 报告它正在停止。由于它与您的环境有关,因此我会注意,如果您想通过管理中心停止/启动/重新启动自动缩放的服务器,您首先需要从该成员中删除自动缩放功能,或者将该成员置于维护模式。
为了回到你的集体的正确状态,你应该只需要等到成员的心跳超时过期 3 次(心跳的默认值是 60 秒,所以总共 3 分钟),之后 Controller 应该将它们标记为已停止(因为在约定的时间内没有收到他们的消息)。或者,您可以启动成员备份,然后“正确”停止它们(这可以通过管理中心通过将停止的成员置于维护模式(因为它们是自动缩放的)然后选择“重新启动”来启动成员备份然后“停止”以停止它。然后您可以删除维护模式)。
关于docker - Liberty Admin Center 将 Docker 服务器显示为正在运行,而它没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38317595/