解决:DockerContainerexitedwithcode137
说明:docker-compo 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
删除所有unud镜像:docker system prune -a
当然还有⼀种情况是:还有内存,但oom-killer依旧把进程杀死了。
这种情况是low memory耗尽,内核使⽤low memory来跟踪所有的内存分配。如果low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运⾏。