docker-compose不设置CPU限制

bvjxkvbb  于 2022-11-02  发布在  Docker
关注(0)|答案(1)|浏览(419)

我想在停靠合成文件中的容器上设置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
js4nwp54

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的讨论。

相关问题