Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 限制Docker compose中没有swarm的可用主机资源_Linux_Docker_Docker Compose - Fatal编程技术网

Linux 限制Docker compose中没有swarm的可用主机资源

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文件中某些Docker容器的资源。原因很简单:主机上运行多个应用程序/服务。所以我想避免单个容器可以使用所有内存,这会损害其他容器

从我学到的文档中,这可以使用
资源来完成。但这超出了部署的范围。因此,我必须编写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会忽略它”这是一个很好的技巧!非常感谢。