Docker容器错误码137终止排查:资源限制配置查询与移除
解决容器因资源限制被终止(退出码137,OOMKilled=false)的问题
首先,退出码137通常意味着容器进程收到了SIGKILL信号(128+9),既然OOMKilled状态为false,说明不是宿主机的OOM Killer触发的,你的猜测没错,很大概率是Docker本身的资源限制配置导致容器被强制终止。下面是查看和移除这些限制的具体方法:
一、查看容器的资源限制配置
1. 通过docker inspect查看当前容器的资源约束
直接用docker inspect命令查看容器的HostConfig部分,这里包含了所有资源限制相关的配置:
docker inspect <容器ID或名称> | grep -A 30 "HostConfig"
如果你的系统安装了jq工具,可以用更清晰的格式输出关键字段:
docker inspect <容器ID或名称> | jq '.[] | .HostConfig | {Memory, MemorySwap, CpuQuota, CpuPeriod, CpuShares, BlkioWeight}'
这些字段的含义:
Memory:容器能使用的最大内存(字节数),0表示无限制MemorySwap:容器能使用的最大内存+swap空间,0表示无限制CpuQuota/CpuPeriod:一起控制CPU的使用上限,CpuQuota/CpuPeriod就是CPU核心数的限制CpuShares:CPU权重(相对其他容器),不是硬限制
2. 检查Docker Compose配置文件
因为你是用docker-compose启动的容器,直接查看你的docker-compose.yml文件,找到对应服务下的资源限制配置。通常会在resources.limits节点下,比如:
services: your-service-name: image: your-image # 其他配置... resources: limits: memory: 256M cpus: '0.25'
如果存在这样的配置,就是导致容器被终止的原因。
二、移除资源限制的方法
1. 修改Docker Compose配置并重启
打开docker-compose.yml,删除对应服务下的resources.limits整个节点(如果只是想调整,也可以把值改大),然后执行重启命令:
docker-compose up -d --force-recreate
--force-recreate参数会强制重新创建容器,确保新的配置生效。
2. 临时验证(可选)
如果你想先临时验证是不是资源限制的问题,可以直接用docker run命令启动一个无限制的容器测试:
docker run --rm -d --name test-container <你的镜像>
如果这个容器能正常运行,就确认是之前的资源限制配置导致的问题。
额外排查点
如果移除限制后容器还是被终止,建议检查容器内的应用日志(比如进入容器查看/var/log下的日志),或者确认宿主机本身是不是有其他进程占用了过多资源,导致容器间接被影响。
内容的提问来源于stack exchange,提问作者Jakim
相关产品推荐
相关产品推荐

