如果您收到EWS的通知并查看到此文档,说明您的主机上存在不属于EWS管控范围内的运行状态容器,可能会导致主机上其他EWS服务的运行异常,请花10分钟的时间看完并进行自查校验。
什么是"多余容器"?
在EWS页面创建服务,添加容器(会指定主机)或删除容器,EWS会知道哪台主机上有哪些服务的哪些容器。但是,还有一些容器,运行在主机上,但是EWS并不知道其存在。
页面登录EWS,访问 https://ews.cloud.tmall.com/container/match/instance/list ,可以查看自己ECS下是否有"多余容器"。(如果没有查到,可能是数据还没有及时同步,登录张北机器,执行docker ps,如果看到容器列表中含有"registry-hz.acs",说明这个就是从杭州主机镜像迁移过来的多余容器了)
1.镜像迁移
主机ECS通过镜像迁移而来(比如杭州的主机镜像迁移到张北)。这些主机上还有原来的容器数据(docker镜像容器等),迁移后主机启动docker,这些容器会被操作系统重新拉起来。目前产生多余容器的主要原因是这个
2.网络问题
当您在EWS删除容器或服务时,我们与主机agent的通信可能因为这样那样的原因,指令没有真正下发到机器上,导致容器仍运行在主机上。这个情况属于极少数。
一般情况下,多余的容器运行不会被访问到,因为这些容器不在我们接入层路由中。但是其运行时占用了主机端口,可能导致其他容器运行异常,或其他异常问题,看下面三个常见问题。
案例1:镜像迁移导致张北主机上的php服务访问出现404
docker logs排查发现php容器中的nginx进程启动失败,原因是端口被占用
发现主机上很多类似的容器,这些容器的镜像来自registry-hz,基本可以断定是杭州的主机迁移过来的
案例2:镜像迁移导致张北服务下的容器webssh访问出现ssh_exchange_identification
原因与案例1中类似,webssh端口被其他进程(多余容器)占用,导致该容器的webssh登录问题
案例3:访问新域名(新容器),返回的内容不符合预期
原因分析举例:
1.镜像迁移导致张北主机上运行了多余容器,比如容器占用了xx端口
2.新建张北服务,添加容器后,由于多余容器占用的端口不在EWS管控内,所以EWS给新容器错误地分配了xx端口
3.张北服务启动后(实际上会因为端口占用部署失败,但是因为xx端口check成功,所以部署成功),访问张北域名,流量到达机器的xx端口
4.xx端口返回的是多余容器的内容
解决方案:停止并删除这些多余容器,然后重启服务
页面登录ews,访问 https://ews.cloud.tmall.com/container/match/instance/list
如果返回信息有data字段,找到instanceId,以及对应的containerIds。
1.登录到主机进行检查容器,看是否是“多余容器”。
2.docker stop 容器id,docker rm 容器id
3.EWS页面上重启张北服务