如何在Ubuntu全局限制Docker(或Docker Compose)资源?
给Ubuntu上的Docker设置全局总内存上限
Hey there! 刚从Mac转Ubuntu用Docker确实会碰到这种差异——毕竟Mac上的Docker是套了一层虚拟机,那个全局资源设置其实是给虚拟机分配配额;而Ubuntu上Docker是直接跑在Linux内核上,得用Linux原生的cgroup机制来控制总资源,下面给你两种靠谱的实现方式:
方法一:通过Systemd限制Docker服务总内存(永久生效)
这是最推荐的方式,因为Ubuntu用Systemd管理服务,直接给Docker服务设置内存上限就能管住所有容器的总使用量:
- 创建/编辑Docker服务的配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d sudo nano /etc/systemd/system/docker.service.d/override.conf - 在文件里添加以下内容,把
6G改成你想要的总内存上限:[Service] MemoryLimit=6G - 重新加载Systemd配置并重启Docker服务:
sudo systemctl daemon-reload sudo systemctl restart docker
这样整个Docker服务(包括所有正在运行的容器)的总内存就被限制在6GB以内了,重启系统后也会保持生效。
方法二:临时设置cgroup内存限制(即时生效,重启失效)
如果只是想临时测试一下总内存限制,可以直接操作cgroup文件(适合Ubuntu 20.04+默认的cgroup v2):
- 找到Docker对应的cgroup切片路径,一般是
/sys/fs/cgroup/docker.slice - 设置内存上限:
echo 6G | sudo tee /sys/fs/cgroup/docker.slice/memory.max
这个命令执行后立刻生效,但重启系统或Docker服务后会恢复默认,适合临时调试用。
补充说明
如果你还想给单个容器设置默认的资源限制(比如每个容器最多用2GB),可以编辑/etc/docker/daemon.json文件添加默认配置:
{ "default-resources": { "memory": "2G" } }
改完后重启Docker即可,但这个是单容器的默认值,和总上限不冲突——总上限会管住所有容器加起来的内存使用。
内容的提问来源于stack exchange,提问作者Lestat86
相关产品推荐
相关产品推荐

