限制Docker容器占用的内存大小
启动Docker容器时,若没有设置memory和memory-swap选项,则该容器可以使用主机的所有内存,没有限制。
查看容器占用内存大小:
docker stats [<container id/name>]
启动容器时命令中加入 --memory 500m 选项即可:
docker run -d --name <containerName> -p 8000:80 --memory 512m nginx
--memory 可以简写成 -m
限制已启动容器的内存
docker update --m 512m <container id/name>
如果这个更新命令报错:
Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time
则需要设置--memory-swap:
docker update --memory=512m --memory-swap -1 <container id/name>
报错解读:
--memory-swap 限制内存和 Swap 的总和,不设置的话默认为--memory的两倍
docker 默认没有启用memory-swap交换内存,直接设置了内存会出问题,也就是说宿主 swap 支持使用多少则容器即可使用多少,如果 --memory-swap 设置小于 --memory则设置不生效。
注意:设置 --memory-swap前,看下你的服务器是否分配了swap虚拟内存,没分配同样会报错;
将 memory-swap 设置值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制。
- 如果只指定了 --memory 则 --memory-swap 默认为 --memory 的两倍
- 如果 --memory-swap 和 --memory 设置了相同值,则表示不使用 Swap
- 如果设置了 --memory-swap 参数,则必须设置 --memory 参数
- 后期 update --memory 时数值不能超过 --memory-swap 的值,否则会报错 Memory limit should be smaller than already set memoryswap limit
查询是否配置成功:docker inspect containerId
另一个报错场景
Your kernel does not support swap limit capabilities or the cgroup is not mounted
解决:
// 1 打开/etc/default/grub文件
sudo vi /etc/default/grub
// 2 加入下面配置
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
// 3 更新grub系统
sudo update-grub
// 4 重启
|