如何配置 Docker 守护进程的节点资源预留防止容器过载直接将宿主机操作系统夯死

雨强酱_5586

雨强酱_5586

2026-06-23

734人浏览

原创

防止容器过载拖垮宿主机的关键是节点级资源预留:通过daemon.json配置memory-reservation和cpu-reservation为系统进程留出安全余量,并配合systemd对dockerd自身设memorylimit和cpuquota硬限,同时禁用swap与thp。

如何配置 docker 守护进程的节点资源预留防止容器过载直接将宿主机操作系统夯死

要防止容器过载拖垮宿主机操作系统,关键不是只给单个容器设限,而是让 Docker 守护进程(dockerd)本身“留出安全余量”——即在节点级预留 CPU 和内存资源,确保系统进程(如 sshd、systemd、kswapd、dockerd 自身)始终有可用资源。这层预留是容器资源限制无法替代的底层防线。

明确节点级预留与容器级限制的区别

容器的 --memory 或 deploy.resources.limits 只约束单个容器;而节点级预留是告诉 dockerd:“别把整台机器的资源都分出去,必须给我留够系统运转的底子”。它不通过 cgroups 直接作用于容器,而是影响调度决策和资源分配上限。

通过 daemon.json 配置守护进程资源预留

Docker 1.13+ 支持在 /etc/docker/daemon.json 中设置全局资源约束,这是最稳妥的节点级预留方式:

  • memory-reservation:指定 dockerd 启动时向内核申请保留的物理内存(单位:字节或带后缀如 512m),该内存不会被容器调度器分配出去
  • cpu-reservation:同理,为系统保留 CPU 时间片(例如 "0.5" 表示预留半核)
  • 这两个参数需配合 experimental: true 启用(Docker CE 20.10+ 默认开启实验特性)

示例配置:

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载
{ "experimental": true, "default-runtime": "runc", "memory-reservation": "1g", "cpu-reservation": "0.5" }

重启 dockerd 生效:sudo systemctl restart docker

配合 systemd 对 dockerd 进程自身设限

仅靠 daemon.json 不足以防住 dockerd 自身失控(如大量镜像构建、并发 pull 导致内存暴涨)。应通过 systemd 强制约束 dockerd 进程资源:

  • 编辑 /etc/systemd/system/docker.service.d/override.conf
  • 添加内存与 CPU 硬限:
[Service] MemoryLimit=2G CPUQuota=80%

这样即使 dockerd 出现异常,也不会吃光整机资源。注意 MemoryLimit 值需大于 memory-reservation,否则冲突。

禁用 swap 并关闭透明大页(THP)

这两项不是“预留”,但直接决定 OOM 是否会演变成系统夯死:

  • 禁用 swap:在宿主机执行 sudo swapoff -a,并在 /etc/fstab 中注释 swap 行。启用 swap 会让内存压力转为磁盘 I/O 延迟,导致响应冻结而非快速失败
  • 关闭 THP:运行 echo never > /sys/kernel/mm/transparent_hugepage/enabled。THP 在内存紧张时触发同步折叠,加剧卡顿,对容器化环境弊大于利

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

2023.10.17

3860

11

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.20

3106

12

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.21

5179

8

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2024.04.12

2435

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

3004

6

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

2025.04.02

3223

9

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

645

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

4539

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

5437

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习