Linux 限制Docker compose中没有swarm的可用主机资源
我只是想限制Docker compose文件中某些Docker容器的资源。原因很简单:主机上运行多个应用程序/服务。所以我想避免单个容器可以使用所有内存,这会损害其他容器 从我学到的文档中,这可以使用Linux 限制Docker compose中没有swarm的可用主机资源,linux,docker,docker-compose,Linux,Docker,Docker Compose,我只是想限制Docker compose文件中某些Docker容器的资源。原因很简单:主机上运行多个应用程序/服务。所以我想避免单个容器可以使用所有内存,这会损害其他容器 从我学到的文档中,这可以使用资源来完成。但这超出了部署的范围。因此,我必须编写docker compose文件,如以下示例所示: php: image: php:7-fpm restart: always volumes: - ./www:/www deploy: r
资源来完成。但这超出了部署的范围。因此,我必须编写docker compose文件,如以下示例所示:
php:
image: php:7-fpm
restart: always
volumes:
- ./www:/www
deploy:
resources:
limits:
memory: 512M
这给了我一个警告:
警告:某些服务(php)使用“deploy”键,该键将被忽略。Compose不支持部署配置-使用docker stack deploy
部署到swarm
这似乎是真的:docker stats
确认,容器能够使用来自主机的所有ram
文件说:
指定与服务的部署和运行相关的配置。这仅在使用docker stack deploy部署到swarm时生效,docker compose up和docker compose run会忽略这一点
但我不需要集群。似乎没有其他方法可以使用docker composer文件限制资源。为什么不能像docker run
中的start参数那样指定某种类型的内存
标记
示例:docker运行--memory=1g$imageName
这对于单个容器非常有效。但是我不能使用它(至少在不违反清晰的关注点分离的情况下),因为我需要使用两个不同的容器
编辑:临时解决方案
我发现,在从版本3降级到版本2(将version:'2'
放在顶部)后,我可以直接使用memu limit
。但我们目前的版本是3.1,所以这不是一个长期的解决方案。文档说,deploy.resources
是像mem\u limit
这样的v2标签的新替代品
有一天,版本2会被弃用。因此,最新版本的资源管理不再可能,至少在没有swarm的情况下是如此?对我来说似乎更糟,真不敢相信 您可以在单个主机上以swarm模式运行docker守护程序。它将添加额外的不需要的功能,如etcd服务发现,但这一切都是在幕后进行的
Docker文档在这里有一个“注意事项”因为许多Docker Compose用户对Compose v3与v2的不兼容性有疑问,所以团队已经开发了
您可以保留所提供的相同部署结构,并且不会忽略它,只需将--compatibility标志添加到docker compose命令(docker compose--compatibility up),如前所述。我用3.5版测试了这一点,并用docker stats进行了验证,可以确认它是否有效。类似的查询:。“cpu_共享、cpu_配额、cpuset、mem_限制、memswap_限制:这些已被deploy下的resources键替换。请注意,deploy配置仅在使用docker stack deploy时生效,docker compose会忽略它”这是一个很好的技巧!非常感谢。