docker容器 Exited (137)错误代码

最近要搭建es集群,由于刚接触es不久,直接使用的docker构建,发现当用两个容器搭建好集群时,再添加新的es容器节点时,总是出现其它容器被kill的现象,查看容器日志未发现任何错误信息,一段时间段非常的迷茫。

由于对es也是刚刚接触,起始认为是配置不当引起了,于是一直在配置这一块找问题,网上的有些教程是直接在物理机器上或者虚拟机上进行部署,而自己的环境是docker, 通过 docker-compose 来部署的,环境有些差异。

有网友提醒有可能是由 OOM 引起的问题,因为代码是137, 使用命令 “docker inspect 容器ID” 查看了一下容器, status列显示”OOMKilled”: false” ,所以从这里查看的话,并非是 OOM 引起的,再加上首次遇到这个问题的时候,个人分析容器的启动过程,新启动一个容器时,dockerd应该先检查内存是否足够,如果不足够的话,则启动新窗口失败才对,而不是将已存在的窗口killed,再启动新容器,所以仍将OOM的原因排除掉了。

后来发现一篇文章https://www.petefreitag.com/item/848.cfm 介绍到这个和 docker for mac 分配的内存大小有关系,试着将给 docker 分配的内存调整为4G,重新docker-compose up 竟然解决了。

由此可见docker软件对容器启动时处理逻辑与自己分析的还是有些差异的。 可惜浪费了好几天的时间,很值的好好反思一下!

总结一下,还是基础不牢固,解决思路,分析问题不清晰,一直在配置这一块的周旋,虽然首次怀疑是OOM引起的,但在容器日志里并没有OOM的日志信息,再加上集群编排时有“ – “ES_JAVA_OPTS=-Xms512m -Xmx512m” 配置项,给es分配512M的内存大小,也忽略掉物理机器给docker分配内存大小这个因素了,所以直接将OOM的原因排除了,而未想到OOM发生时,并不保证一定在容器日志里记录的。