解决:Docker Container exited with code 137

当执行`docker-compose up`时遇到Container退出代码137,这可能是由于Linux OOM Killer因内存不足而杀死了容器。通过`docker inspect ContainerId`检查`OOMKilled`属性确认。解决方案包括释放内存或调整资源限制。此外,即使内存总量充足,如果lowmemory耗尽,也会触发OOM Killer。了解并应对Linux OOM机制对于确保系统稳定至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


说明:docker-compose up时,报了某Container exited with code 137… 我怀疑该容器被Linux进行OOMKille了

一、问题描述

服务器上发包,构建完镜像执行Up的时候,给我提示了个:Container exited with code 137

这又是靓女落泪的一小会儿啊…

不过,看提示code 137,猜测是服务器内存不足,直接被Linux OOM killer(Out-Of-Memory killer)了。

获取镜像的元数据:docker inspect ContainerId

查看镜像的元数据,State中有个OOMKilled属性,为true则表示容器收到了SIGKILL信号,进程被杀掉了。

二、什么是OOM?

OOM全称 Out-of-Memory,是指操作系统的可用内存已经不足,且无法再分配新的内存出来给进程使用,导致系统无法继续工作。若不紧急处理,将会导致整个系统崩溃,所有进程均被杀死。

因此Linux OS为了保证内核系统层面的稳定运行,会根据一定算法规则,选出最优先占内存空间最大的进程进行杀死,进而释放出较多的内存空间,使系统程序继续稳定运行。这个机制就是OOM Killer机制。

三、解决方案

楼主遇到的是这种情况,所以释放了内存。再重新跑就好了。

查看存储:docker system df

删除所有unused镜像:docker system prune -a

在这里插入图片描述

当然还有一种情况是:还有内存,但oom-killer依旧把进程杀死了。

这种情况是low memory耗尽,内核使用low memory来跟踪所有的内存分配。如果low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。

可参考:https://developer.aliyun.com/article/513783

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值