【发布时间】: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