在Debian上可通过以下方式限制Docker资源:
-
命令行参数(
docker run)- CPU限制:
--cpus(指定核心数,如--cpus=1.5)、--cpuset-cpus(绑定指定核心,如--cpuset-cpus="0,2")。 - 内存限制:
--memory(硬限制,如--memory=512m)、--memory-swap(总内存+交换空间,建议与--memory一致)、--memory-reservation(软限制,低于硬限制时触发)。 - 磁盘I/O限制:
--blkio-weight(设置权重,10-1000)。
- CPU限制:
-
Docker Compose
在docker-compose.yml中通过deploy.resources配置:services: app: image: nginx deploy: resources: limits: cpus: '1' memory: 512M reservations: cpus: '0.5' memory: 256M -
cgroups手动配置
- 创建cgroup并设置资源:
sudo cgcreate -g cpu,memory:/my_container echo "500000" > /sys/fs/cgroup/cpu/my_container/cpu.cfs_quota_us # 限制50% CPU echo "1G" > /sys/fs/cgroup/memory/my_container/memory.limit_in_bytes # 限制1GB内存 - 将容器PID加入cgroup:
sudo cgclassify -g cpu,memory:/my_container $(docker inspect -f '{{.Pid}}' <容器ID>)
- 创建cgroup并设置资源:
-
Docker Daemon全局配置
修改/etc/docker/daemon.json,添加默认限制(需重启Docker):{ "default-ulimits": { "nofile": { "Soft": 65536, "Hard": 65536 } } }
注意:部分参数(如--memory-swap)需宿主机内核支持,可通过docker info检查功能是否启用。生产环境建议优先使用docker run或Docker Compose,避免手动操作cgroups的复杂性。