必须同时设置 -m 和 --memory-swap 才能禁用 swap 并防止容器拖垮宿主机:-m 设物理内存上限,--memory-swap 设内存+swap 总上限,二者相等即禁用 swap;可用 docker update 动态调整,docker inspect 或 cgroup 文件验证生效。

直接用 -m(或 --memory)参数设硬上限,再配 --memory-swap 禁用 swap,就能防止容器吃光宿主机内存。
必须同时设置两个参数,缺一不可
只设 -m 不设 --memory-swap,Docker 默认允许使用等量 swap(即总内存上限是 -m 的 2 倍),这会让容器在物理内存耗尽后疯狂换页,拖慢甚至卡死整个系统。
-
-m 1g:容器最多用 1GB 物理内存 -
--memory-swap 1g:内存 + swap 总和也不能超过 1GB → 实际禁用了 swap
这样一旦容器尝试突破 1GB,内核会立刻 OOM Kill 进程,容器退出,但宿主机不受影响。
常见可靠组合示例
-
docker run -d -m 512m --memory-swap 512m nginx docker run -d -m 2g --memory-swap 2g my-java-app
运行时也能补加限制
已启动的容器可用 docker update 动态加上:
docker update --memory=1g --memory-swap=1g container-name
验证是否生效
docker inspect container-name | grep -i memory # 或直接看 cgroup 设置: docker exec container-name cat /sys/fs/cgroup/memory/memory.limit_in_bytes
输出值应与你设定的字节数一致(如 1073741824 = 1GB)。
不复杂但容易忽略











