我想在停靠合成文件中的容器上设置CPU限制。
当我执行以下命令时:
docker run -d --rm --cpus 0.3 --name aaa progrium/stress -c 8 -t 20s
根据Docker统计数据,容器占用了30%的岩心:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
d6be318a85e6 aaa 29.01% 1.328MiB / 3.805GiB 0.03% 806B / 0B 0B / 0B 9
并根据Docker检查设置限制:
$ docker inspect aaa | grep -i cpu
"CpuShares": 0,
"NanoCpus": 300000000,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"CpuCount": 0,
"CpuPercent": 0,
这是预期的行为。但是当我写下面的docker-compose.yml文件时:
version: '3'
services:
aaa:
image: progrium/stress
command: -c 8 -t 20s
deploy:
resources:
limits:
memory: 100M
cpus: '0.3'
并以docker-compose up -d
启动项目;我得到了以下统计输出:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a94118f4a5f7 docker-aaa-1 87.74% 1.359MiB / 100MiB 1.36% 806B / 0B 1.91MB / 0B 9
并且在检查输出中没有设置限制。我希望看到CPU限制:
$ docker inspect docker-aaa-1 | grep -i cpu
"CpuShares": 0,
"NanoCpus": 0,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"CpuCount": 0,
"CpuPercent": 0,
我的结论是:
- 我的Docker引擎能够设置cpu限制
- 读取
docker-compose.yml
文件中的限制(docker stats显式显示内存限制 - docker-compose无法设置限制
我尝试用旧的方法设置cpu限制(如compose文件文档中所述)。
version: '2'
services:
aaa:
image: progrium/stress
command: -c 8 -t 20s
cpus: 0.3
结果是相同的(对CPU没有限制)。并且没有来自docker-compose的错误消息。
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8658bc78c795 docker-aaa-1 180.75% 1.367MiB / 3.805GiB 0.04% 1.18kB / 0B 0B / 0B 9
我如何让docker-compose设置CPU限制?我错过了哪些文档或配置行?
谢谢你的帮助!
版本:
$ docker-compose -v
Docker Compose version v2.4.1
$ docker -v
Docker version 20.10.21, build baeda1f
$ uname -a
Linux hostname 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
1条答案
按热度按时间js4nwp541#
我刚刚看了一下,似乎这是一个关于Docker Swarm模式和普通模式的问题。v3格式是专门为Docker Swarm开发的,
deploy
键只适用于Docker Swarm模式。据我所知,有3个解决方案可以解决您的问题:1.在本地计算机上初始化群群集(
docker swarm init
)1.对所有内容使用docker-compose v2(
version: '2'
)1.在兼容性模式下使用docker-compose,并希望所有需要的选项都能正确翻译(
--compatibility
)请参阅有关此here的讨论。