温馨提示×

centos docker怎么限制内存

小樊
34
2026-09-05 22:20:23
栏目: 智能运维

CentOS 上用 Docker 限制容器内存,主要通过 docker rundocker-compose 的参数来实现。下面按常见场景说明。


一、使用 docker run 限制内存

1️⃣ 限制最大内存(硬限制)

docker run -d --name myapp \
  -m 512m \
  myimage
  • -m / --memory:容器最多可用的内存
  • 超过会被 OOM Kill

2️⃣ 限制内存 + Swap

docker run -d --name myapp \
  -m 512m \
  --memory-swap=1g \
  myimage
  • memory-swap = 内存 + swap
  • 若只设 -m,swap 默认是 -m 的 2 倍(取决于系统)

3️⃣ 禁止 swap

docker run -d --name myapp \
  -m 512m \
  --memory-swap=512m \
  myimage

4️⃣ 限制内核内存(少见)

--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 特别注意点

✅ 1. 确认 cgroup 正常

CentOS 7 默认使用 cgroup v1,一般没问题
CentOS 8 / Stream 可能使用 cgroup v2,Docker 需较新版本(≥20.10)

检查:

docker info | grep -i cgroup

✅ 2. 内核参数(可选)

确保允许 OOM:

sysctl vm.overcommit_memory

四、验证内存限制是否生效

docker stats myapp

或进入容器:

docker exec -it myapp bash
free -m

五、常见坑

❌ 只设 swap 不设 memory
❌ CentOS 8 用老 Docker 不支持 cgroup v2
docker-composedeploy 但非 swarm


如果你愿意,可以告诉我:

  • CentOS 版本
  • Docker 版本
  • docker run 还是 docker-compose

我可以给你精确命令

0