容器因exit code 137终止是内存不足触发OOM Killer所致,需依次增加Docker Desktop内存、显式设置容器内存参数、禁用CUDA回退CPU模式、配置国内镜像源、检查cgroup v2内存限制。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您尝试在Docker中运行Llama 3模型,但容器频繁因exit code 137终止,日志显示signal: killed且无全局OOM记录,则很可能是容器内存配置过小,触发了内核或调度器级OOM Killer强制终止进程。以下是修复此问题的步骤:
一、增加Docker Desktop内存分配(Windows/macOS)
该方法直接提升Docker运行时可用内存上限,适用于Docker Desktop用户,避免容器因宿主机虚拟化层资源不足而被误杀。
1、打开Docker Desktop应用程序。
2、点击右上角齿轮图标进入Settings界面。
3、在左侧导航栏选择Resources → Memory。
4、将滑块调整至至少8 GB(推荐12 GB),确保不低于Llama-3-8B模型最低需求(约7.9 GiB)。
5、点击Apply & Restart,等待Docker服务完全重启。
二、显式设置容器内存限制与保障参数
该方法通过docker run命令强制覆盖默认内存策略,防止Docker 27调度器因cgroup v2响应过快而误判显存峰值为内存泄漏并主动kill容器。
1、停止当前运行的Llama 3容器:docker stop $(docker ps -q --filter ancestor=ollama/ollama)。
2、使用以下参数重新启动容器:--memory=128g --memory-reservation=96g --oom-kill-disable=false --label "io.docker.scheduler.oom-suppress=true"。
3、完整示例命令:docker run -d --name ollama-llama3 --memory=128g --memory-reservation=96g --oom-kill-disable=false --label "io.docker.scheduler.oom-suppress=true" -p 11434:11434 -v ~/.ollama:/root/.ollama ollama/ollama。
三、禁用CUDA加速强制回退CPU模式
该方法绕过GPU显存分配路径,彻底规避vLLM或Ollama在加载Llama 3时因显存预分配失败导致的OOM,适用于仅有CPU资源或显存严重受限环境。
1、在启动容器前,设置环境变量:OLLAMA_NO_CUDA=1。
2、执行运行命令:OLLAMA_NO_CUDA=1 docker run -it --rm -p 11434:11434 -v ~/.ollama:/root/.ollama ollama/ollama。
3、验证是否生效:容器日志中应出现"Using CPU backend"而非CUDA相关初始化信息。
四、修改Ollama配置启用国内镜像源并降低拉取开销
该方法减少镜像拉取阶段的内存瞬时峰值,避免因网络超时重试或镜像层解压过程耗尽临时内存空间,间接缓解OOM诱因。
1、编辑配置文件:~/.ollama/config.json(Windows路径为%USERPROFILE%\.ollama\config.json)。
2、添加registry映射段:{"registries": {"https://registry.cn-hangzhou.aliyuncs.com/ollama": {}}}。
3、保存后执行:ollama serve重启服务,确认日志中registry地址已切换为阿里云镜像源。
五、检查并修正cgroup v2内存限制覆盖行为
该方法用于定位容器实际生效的cgroup内存上限是否被调度器动态篡改,尤其适用于Docker 27环境,可验证memory.max值是否符合预期。
1、获取目标容器ID:docker ps -q --filter name=ollama-llama3。
2、进入对应cgroup路径:cat /sys/fs/cgroup/docker/<container-id>/memory.max。
3、若返回值为max或远低于设定值(如9223372036854771712字节),说明调度器未正确注入限制,需补加--memory参数并重启容器。


















