我只是想在 docker-compose 文件中限制某些 Docker 容器的资源。原因很简单:主机上运行着多个应用程序/服务。所以我想避免单个容器可以使用例如所有内存,这会损害其他容器。
从我了解到的文档中,这可以通过使用来完成resources
。但这已经超出了deploy
。所以我必须编写我的 docker-compose 文件,如下例所示:
php:
image: php:7-fpm
restart: always
volumes:
- ./www:/www
deploy:
resources:
limits:
memory: 512M
这给了我警告:
警告:某些服务 (php) 使用“deploy”键,该键将被忽略。 Compose 不支持部署配置 - 使用docker stack deploy
部署到集群。
这似乎是真的:docker stats
确认,容器能够使用主机的所有内存。
文档说:
指定与服务部署和运行相关的配置。这仅在使用 docker stack deploy 部署到 swarm 时生效,并且会被 docker-compose up 和 docker-compose run 忽略。
但我不需要聚类。似乎没有其他方法可以使用 docker composer 文件来限制资源。为什么不能指定某种类型memory
标签就像中的开始参数docker run
does?
例子:docker run --memory=1g $imageName
这对于单个容器来说非常有效。但我不能使用它(至少在不违反关注点明确分离的情况下),因为我需要使用两个不同的容器。
编辑:临时解决方法
我发现我可以使用mem_limit
从版本 3 降级到版本 2 后立即(放置version: '2'
在上面)。但我们目前使用的是 3.1 版本,因此这不是一个长期的解决方案。文档说,deploy.resources
是 v2 标签的新替代品,例如mem_limit
.
有一天,版本 2 会被弃用。那么最新版本的资源管理不再可能了,至少在没有集群的情况下是这样?对我来说,情况似乎越来越糟,简直不敢相信......