温馨提示×

ubuntu docker如何限制资源

小樊
39
2026-09-07 10:05:37
栏目: 智能运维

在 Ubuntu 上使用 Docker 限制容器资源,主要通过 docker run 参数docker-compose 配置来实现。下面按常见资源类型说明。


一、CPU 限制

1. 限制 CPU 核心数

docker run --cpus=1.5 ubuntu

表示最多使用 1.5 个 CPU 核心。

2. 绑定指定 CPU

docker run --cpuset-cpus="0,1" ubuntu

只在 CPU 0 和 1 上运行。

3. 设置 CPU 权重(相对优先级)

docker run --cpu-shares=512 ubuntu

默认是 1024,值越大优先级越高(不是硬性限制)。


二、内存限制

1. 限制最大内存

docker run -m 512m ubuntu

容器最多使用 512MB 内存。

2. 限制内存 + Swap

docker run -m 512m --memory-swap=1g ubuntu

总内存 + swap 上限为 1GB。

注意:

  • --memory-swap 必须 ≥ -m
  • 设为 -1 表示不限制 swap(不推荐)

三、磁盘 I/O 限制(仅部分存储驱动支持)

1. 限制读写速度

docker run \
  --device-read-bps /dev/sda:1mb \
  --device-write-bps /dev/sda:1mb \
  ubuntu

2. 限制 I/O 次数

docker run \
  --device-read-iops /dev/sda:100 \
  --device-write-iops /dev/sda:100 \
  ubuntu

四、网络限制(间接方式)

Docker 原生不支持直接限速,可用:

  • tc(Linux traffic control)
  • 自定义网络 + 第三方工具

示例(容器外):

tc qdisc add dev docker0 root tbf rate 10mbit latency 50ms burst 1540

五、使用 docker-compose 限制资源

version: "3"
services:
  app:
    image: ubuntu
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 512M

⚠️ 注意:
deploy.resources 只在 Docker Swarm 模式下生效
普通 docker-compose up 用下面方式:

services:
  app:
    image: ubuntu
    mem_limit: 512m
    cpus: 1.0

六、查看资源限制是否生效

docker stats

或查看 cgroup:

cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.limit_in_bytes

七、常见注意事项(Ubuntu)

  1. 确保开启 cgroup(默认已开启)
  2. 使用 overlay2 存储驱动
  3. 老旧 Ubuntu + 老 Docker 可能不支持部分参数
  4. 内存限制过低可能导致 OOM 被 kill

如果你有具体场景(如:限制某个服务 CPU 不超过 50%防止容器吃满内存Kubernetes 环境),可以告诉我,我可以给更精准的配置。

0