【问题标题】:Limit useable host resources in Docker compose without swarm在 Docker compose 中限制可用的主机资源而不使用 swarm
【发布时间】:2017-07-16 10:07:22
【问题描述】:

我只是想在一个 docker-compose 文件中限制一些 Docker 容器的资源。原因很简单:主机上运行着多个应用程序/服务。所以我想避免单个容器可以使用例如所有内存,这会损害其他容器。

从我了解到的文档中,这可以使用resources 来完成。但这超出了deploy。所以我必须像下面的例子那样编写我的 docker-compose 文件:

  php:
    image: php:7-fpm
    restart: always
    volumes:
      - ./www:/www
    deploy:
      resources:
        limits:
          memory: 512M

这给了我警告:

警告:某些服务 (php) 使用“部署”键,该键将被忽略。 Compose 不支持部署配置 - 使用 docker stack deploy 部署到 swarm。

这似乎是真的:docker statsconfirms,容器能够使用主机的所有内存。

文档说:

指定与服务的部署和运行相关的配置。这仅在使用 docker stack deploy 部署到 swarm 时生效,并且被 docker-compose up 和 docker-compose run 忽略。

但我不需要聚类。似乎没有其他方法可以使用 docker composer 文件来限制资源。为什么不能像docker rundoes 中的起始参数一样指定某种memorytag?

示例:docker run --memory=1g $imageName

这对于单个容器非常有效。但是我不能使用它(至少在不违反关注点的清晰分离的情况下),因为我需要使用两个不同的容器。

编辑:临时解决方法

我发现,从版本 3 降级到版本 2 后,我可以直接使用 mem_limit(将 version: '2' 放在顶部)。但我们目前使用的是 3.1 版,所以这不是一个长期的解决方案。文档说,deploy.resources 是 v2 标签的新替代品,比如mem_limit

有一天,第 2 版将被弃用。因此,至少在没有集群的情况下,最新版本不再可能进行资源管理?对我来说似乎更糟了,不敢相信……

【问题讨论】:

  • 类似查询:stackoverflow.com/questions/42453473/…。 " cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit:这些已经被deploy下的resources key替换了。注意deploy配置只在使用docker stack deploy时生效,被docker-compose忽略"

标签: linux docker docker-compose


【解决方案1】:

由于许多 Docker Compose 用户有 complained 关于 compose v3 与 v2 不兼容的问题,因此团队开发了 compatibility mode

您可以保留您提供的相同部署结构,并且不会被忽略,只需将 --compatibility 标志添加到 docker-compose 命令(docker-compose --compatibility up),如 here 所述。我用 3.5 版本对此进行了测试,并通过 docker stats 进行了验证,可以确认它可以正常工作。

【讨论】:

    【解决方案2】:

    您可以在单个主机上以集群模式运行 docker 守护程序。它将添加额外的不需要的功能,例如 etcd 服务发现,但这一切都在幕后。

    Docker 文档在这里有一个关于它的“注释”https://docs.docker.com/engine/swarm/swarm-tutorial/#three-networked-host-machines

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      相关资源
      最近更新 更多