Docker Container 錯誤排查指南
English Abstract: When a container exits with code 137 or 143, it's tempting to assume OOM or a clean shutdown — but both assumptions are often wrong. This post walks through reading docker inspect 's ExitCode and OOMKilled fields correctly, decoding the 128+signal exit code convention, cross-checking kernel-level OOM killer logs with dmesg / journalctl , setting sane memory limits, and the classic shell-form vs exec-form CMD pitfall that silently breaks SIGTERM handling. 當 production 裡的某個 container 無預警停掉, docker ps 已經看不到它, docker ps -a 卻顯示 Exited (137),第一個念頭通常是「是不是被 OOM killer 幹掉了」。但 137 不一定代表記憶體不足,143 也不一定代表你自己下了 docker stop 。這篇文章從 docker inspect 的欄位意義開始,拆解 Exit Code 與訊號的對應關係、怎麼用 dmesg / journalctl 找出真正的 OOM killer 記錄,到設定 memory limit 與讓應用程式正確處理 SIGTERM,建立一套完整的排查流程。 (一)用 docker inspect 看懂 ExitCode 與 OOMKilled container 停掉的瞬間, docker ps -a 只能看到一個簡化過的狀態字串,真正有用的欄位要從 docker inspect 的 State 區塊才看得到。先執行: docker inspect <container_id> --format '{{json...