如何在docker-compose中限制内存使用?

21
这是我的docker-compose.yaml文件的一部分。
version: '3.4'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    working_dir: /app
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 23M

开始它 docker-compose up -d

当我执行 docker stats 时,它显示限制仍为1.9GiB。我做错了什么?

CONTAINER ID      NAME     CPU %     MEM USAGE / LIMIT     MEM %
13b6588evc1e      app_1    1.86%     20.45MiB / 1.952GiB   1.02%

你需要运行 docker-compose --compatibility up -d - hassanzadeh.sd
3个回答

25

deploy key 只适用于 Swarm 模式以及 docker-compose 文件版本 3 及以上。

在您的情况下,请使用 docker-compose 文件版本 2 并定义资源限制:

version: "2.2"

services:
  app:
    image: foo
    cpus: "0.5"
    mem_limit: 23m

请参见官方文档此处


5
这也适用于版本3,而不需要使用Swarm模式。 - zMan
我在3.4版本上无法工作,所以我切换到了2.2版本。 - dulvui

1

您是否在Swarm模式下运行docker-compose?如果没有,建议使用2.x版本的compose文件格式。

3.x需要在Swarm模式下运行docker-compose才能生效新的资源指令集。

2.x中的替代选项为cpu_shares、cpu_quota、cpuset、mem_limit、memswap_limit、mem_swappiness。


1
你可以通过提供具体的例子(最好)和/或添加相关材料链接来改善你的答案。谢谢! - Manfred
我认为如果你正在进行本地开发,应该使用2.x版本。Swarm旨在在多个主机上运行Docker。 - gary69

0

如果您不打算使用Docker Swarm堆栈部署,请始终坚持由您操作的Docker引擎版本支持的最新2.x版本。 Docker版本17.12及更高版本支持Compose文件版本2.4。 Docker-Compose具有CLI提供的所有功能,而Swarm仍然缺少其中一些:请参见https://github.com/moby/moby/issues/25303

如果您使用docker-compose,在3.x文件中的所有与Swarm相关的元素都将被忽略,除了secrets(或者是configs?!)。 如果您开始将3.x元素与仅限于2.x的元素混合使用,则配置将变为无效。


1
很遗憾,我不能在2.x版本中使用secrets。 - Gherman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接