温馨提示×

ubuntu docker怎么限制内存

小樊
40
2026-09-13 08:50:22
栏目: 智能运维

在 Ubuntu 上使用 Docker 限制容器内存,常用且推荐的方式是 docker rundocker-compose 中通过参数指定内存限制。下面按场景说明。


一、使用 docker run 限制内存

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

docker run -it --memory=512m ubuntu
  • --memory=512m:容器最多使用 512MB 内存
  • 超过后容器会被 OOM Killer 杀掉

2️⃣ 限制内存 + swap

docker run -it --memory=512m --memory-swap=1g ubuntu
  • 总内存 + swap = 1GB
  • 若只设置 --memory,默认 swap = memory 的 2 倍(视系统)

3️⃣ 只允许使用物理内存(禁用 swap)

docker run -it --memory=512m --memory-swap=512m ubuntu

4️⃣ 限制内存软限制(不强制)

docker run -it --memory-reservation=256m ubuntu
  • 系统内存紧张时才生效
  • 不会 OOM

二、使用 docker-compose 限制内存

version: "3"
services:
  app:
    image: ubuntu
    deploy:
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 256M

⚠️ 注意:

  • deploy 配置 只在 swarm 模式或 Compose v2 中生效
  • 普通 docker-compose up 建议用:
services:
  app:
    image: ubuntu
    mem_limit: 512m
    mem_reservation: 256m

三、查看容器内存限制

docker stats

或查看 cgroup:

cat /sys/fs/cgroup/memory/docker/<container-id>/memory.limit_in_bytes

四、常见问题

❓ 限制了但没生效?

  • 确认 cgroup 已启用
  • Ubuntu 默认支持(20.04+ 没问题)
  • 使用 --memory 必须同时支持 swap 参数

❓ WSL2 上的 Docker?

WSL2 默认内存限制是整个 WSL:

# %USERPROFILE%\.wslconfig
[wsl2]
memory=4GB

五、推荐配置示例(Java / Python 服务)

docker run -d \
  --name myapp \
  --memory=1g \
  --memory-swap=1g \
  myimage

如果你用的是 特定服务(如 MySQL / Java)Docker Compose / K8s,可以告诉我,我可以给你更具体的配置。

0