Docker swarm根据其文档说明不支持cgroup_parent:https://docs.docker.com/compose/compose-file/#cgroup_parent 我需要为在特定主机上运行的整个docker容器设置资源约束(而不仅仅是每个容器约束)。运行香草Docker(不在Swarm模式下)允许提供cgroups parent:
docker run -it --rm --cgroup-parent=/climit-cgroup/ <<image-name>>
或者如果使用cgroup_parent
使用docker compose文件。
但是在swarm节点中运行docker容器不提供此功能。在Docker Swarm范围内,有什么可能的解决方案?有没有办法在当前主机的swarm节点上强制现有的cgroup?
答案 0 :(得分:0)
我正在尝试通过systemd在守护程序级别使用cgroups
文件:/etc/systemd/system/dockerdaemon.slice
[Unit]
Description=Slice with MemoryLimit=800M for docker
Before=slices.target
[Slice]
MemoryAccounting=true
MemoryLimit=800M
更改/etc/docker/daemon.json并添加
"cgroup-parent": "dockerdaemon.slice"
然后
systemctl daemon-reload ; service docker restart
然后/etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
Slice=dockerdaemon.slice
MemoryMax=800M
sudo systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/docker.service.d
└─docker.conf
Active: active (running) since Thu 2020-08-20 08:58:45 UTC; 1h 32min ago
Docs: https://docs.docker.com
Main PID: 12718 (dockerd)
Tasks: 17
CGroup: /dockerdaemon.slice/docker.service
└─12718 /usr/bin/dockerd
我也检查
/sys/fs/cgroup/memory/dockerdaemon.slice/docker.service# cat memory.limit_in_bytes
838860800
因此,守护进程似乎正在接管cgroup,但是当我创建的容器超过800M时,docker不会阻止它。 另外docker系统信息仍然可以看到所有内存
所以在我看来,这不能很好地工作,或者我弄错了