docker调整cgroup driver为systemd
在 Docker 中,Cgroup Driver 是用于控制容器资源限制的机制(如 CPU、内存等)。Docker 默认使用 cgroupfs
作为 Cgroup Driver,但在使用 systemd 作为初始化系统的 Linux 发行版中,建议将 Cgroup Driver 改为 systemd
,以更好地与 systemd 集成。
1. 确认当前 Cgroup Driver
查看当前 Docker 使用的 Cgroup Driver:
1 | docker info | grep -i cgroup |
输出示例:
Cgroup Driver: cgroupfs
如果显示 cgroupfs
,则需要修改为 systemd
。
2. 修改 Docker 配置文件
Docker 的配置文件通常位于 /etc/docker/daemon.json
。如果该文件不存在,可以手动创建。
编辑或创建配置文件:
1 | sudo nano /etc/docker/daemon.json |
添加以下内容:
1 | { |
3. 重启 Docker 服务
修改配置文件后,需要重启 Docker 服务以使更改生效:
1 | sudo systemctl restart docker |
4. 验证修改是否生效
再次运行以下命令,确认 Cgroup Driver 已更改为 systemd
:
1 | docker info | grep -i cgroup |
输出示例:
Cgroup Driver: systemd
5. 注意事项
- 兼容性:如果系统中同时运行 Kubernetes,请确保 Kubernetes 的 Cgroup Driver 与 Docker 一致(通常 Kubernetes 也建议使用
systemd
)。 - Docker 版本:此配置适用于 Docker 19.03 及以上版本。如果使用旧版 Docker,请先升级。
- Cgroup v2:如果系统已启用 cgroup v2(通过内核参数
systemd.unified_cgroup_hierarchy=1
),Docker 会自动使用systemd
作为 Cgroup Driver,无需手动配置。
6. 其他相关配置
如果 Docker 容器无法启动或资源限制失效,可能需要检查以下内容:
- 确保 systemd 版本较新(建议 systemd v230+)。
- 确保内核支持 cgroup v2(Linux 4.5+)。
- 如果使用 Kubernetes,请同步修改 Kubelet 的 Cgroup Driver:
1
2
3sudo sed -i 's/--cgroup-driver=cgroupfs/--cgroup-driver=systemd/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
sudo systemctl daemon-reload
sudo systemctl restart kubelet