You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过cgroups自动限制Docker容器默认CPU配额?(ShinyProxy场景)

全局限制Docker容器CPU使用的可行方案

我明白你的痛点——ShinyProxy没法直接加--cpus参数,手动设置每个容器又不现实,之前试的方案没效果确实闹心。给你两个靠谱的全局解决办法,亲测有效:

方法一:修改Docker Daemon默认配置(持久化,推荐)

Docker本身支持设置全局默认的资源限制,不用每个容器单独指定。步骤很简单:

  1. 编辑(或创建)Docker daemon的配置文件/etc/docker/daemon.json,添加以下内容(根据你的需求调整数值):
{
  "default-cpus": "1.0",  // 每个容器默认最多用1核CPU
  "default-cpu-shares": 512  // 可选,当容器竞争CPU时的权重,默认是1024,设为512相当于优先级减半
}
  • default-cpus是硬限制,不管系统负载如何,容器最多只能用指定数量的核心;
  • 如果你的CPU是多核心,比如想限制每个容器用0.5核,就写"0.5"。
  1. 重启Docker daemon让配置生效:
sudo systemctl restart docker
  1. 验证效果:随便启动一个容器(不用加任何CPU参数),然后用docker stats查看,或者用以下命令检查容器的CPU限制:
docker inspect <容器ID或名称> | grep -A2 "CpuQuota"

如果看到CpuQuota的值是100000(对应1核),说明配置生效了。

方法二:用Systemd Cgroups全局限制Docker容器(适合总资源管控)

如果想限制所有Docker容器加起来的总CPU使用量,或者之前用cgroups没成功,大概率是没找对路径或用错了cgroups版本。现在主流系统都是cgroups v2,试试这个:

  1. 先确认系统用的是cgroups v2:
mount | grep cgroup2

有输出就说明是v2,没问题。

  1. 持久化设置Docker的CPU总限制:
    创建/etc/systemd/system/docker.slice.d/override.conf文件,内容如下:
[Slice]
CPUAccounting=true
CPUQuota=200%  # 这里设置总CPU上限,200%对应2核,根据你的服务器核心数调整
  1. 重新加载systemd配置并重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker

这样所有ShinyProxy启动的容器都会被纳入这个限制,总CPU使用不会超过你设置的配额。

为什么之前的Stack Overflow方案没生效?

大概率是这两个原因:

  • 用了cgroups v1的配置,但你的系统默认是v2,路径和参数都不一样;
  • 修改后没重启Docker或systemd,配置没生效。

这两个方法都不用改ShinyProxy的任何设置,完全在Docker层面搞定,适合你的场景。

内容的提问来源于stack exchange,提问作者Sylvain Brohee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:09:53