限额与 137:一次内存被杀的定位

现象:shop-api 每隔几十分钟被重启一次,docker ps -a 里是 Exited (137)。应用侧没有任何错误日志。按顺序点按钮,把「谁杀了它」查清楚。

deploy@server:/srv/shop
# 宿主:Ubuntu 24.04 / Docker 27.3.1 / cgroup v2 / 8 核 8G / 时间 2026-10-04 15:52

读 LIMIT 这一列要注意:docker stats 里显示 / 7.6GiB 表示这个容器没设内存上限,分母是宿主可见内存;显示 / 512MiB 才是限额。MemorySwap 等于 Memory 表示「不许用交换分区」,等于 -1 表示交换不限,大于 Memory 表示总额度里包含交换。

以上输出是真实 docker 命令结果的整理样本,用来观察字段含义;不同版本(含 BuildKit 开关)的打印格式会有差异。