在 CentOS 上用 Docker 限制容器内存,主要通过 docker run 或 docker-compose 的参数来实现。下面按常见场景说明。
docker run 限制内存docker run -d --name myapp \
-m 512m \
myimage
-m / --memory:容器最多可用的内存docker run -d --name myapp \
-m 512m \
--memory-swap=1g \
myimage
memory-swap = 内存 + swap-m,swap 默认是 -m 的 2 倍(取决于系统)docker run -d --name myapp \
-m 512m \
--memory-swap=512m \
myimage
--kernel-memory=128m
docker-compose 限制内存version: "3"
services:
app:
image: myimage
deploy:
resources:
limits:
memory: 512M
⚠️ 注意:
deploy.resources 只在 swarm 模式或较新 Docker Compose v2 生效docker-compose up 可用旧写法:version: "2"
services:
app:
image: myimage
mem_limit: 512m
memswap_limit: 1g
CentOS 7 默认使用 cgroup v1,一般没问题
CentOS 8 / Stream 可能使用 cgroup v2,Docker 需较新版本(≥20.10)
检查:
docker info | grep -i cgroup
确保允许 OOM:
sysctl vm.overcommit_memory
docker stats myapp
或进入容器:
docker exec -it myapp bash
free -m
❌ 只设 swap 不设 memory
❌ CentOS 8 用老 Docker 不支持 cgroup v2
❌ docker-compose 用 deploy 但非 swarm
如果你愿意,可以告诉我:
docker run 还是 docker-compose我可以给你精确命令。