02-服务出现端口冲突处理.md 1.8 KB

1. 出错现象

如下图红色字体中,有一条: No healthy hosts meet the resource constaints: [端口号:端口号/tcp portReservation...,意思就是“主机中已经没有可用的 7650 端口了。”

2. 原因分析

可能的原因有二个:

  1. 这个服务器对外开启了端口,且启动的容器数量,大于主机数;即如果主机只有一台,启动了二个容器,端口都对外开放 7650,一定会报错。
  2. 由于Rancher BUG,容器进入了独立容器中去了。由于容器不断的生成然后又删除,在数据库记录中已经删除,然而实际的容器并未删除成功,导致其成为了孤儿容器,但 孤儿容器 也同样占用了主机的端口。正常的容器是可以看到所属于的 应用/服务 的,一旦成为 孤儿容器 后,就不属于任何 应用/服务 了,会出现在 主机 菜单中的独立容器中。如下图

正常的容器详情

孤儿容器详情

3. 处理方法

  1. 打开 『基础架构』--> 『主机』,主机菜单拉到最下面,可以看到所有的独立容器。

警告!

独立容器中的容器`并非都是可删除的`,用户手工通过 Docker 命令或 docker-compose 启动的容器,也在独立容器中!

删除虽然不会导致固化的数据丢失,但会导致服务中断,且需要重建服务才能恢复!

  1. 从独立容器中,找出业务容器,删除,可以看到业务容器又会运行正常。

  1. 针对 Rancher BUG,已经有一些临时性的解决方法,比如定期清理独立容器。