如何指定内存&;docker compose版本3中的CPU限制

如何指定内存&;docker compose版本3中的CPU限制,docker,docker-compose,Docker,Docker Compose,我无法为版本3中指定的服务指定CPU和内存 对于版本2,它可以在服务下的“mem_limit”和“cpu_shares”参数下正常工作。但在使用版本3时失败了,除非我使用swarm模式,否则将它们放在部署部分似乎不值得 有人能帮忙吗 version: "3" services: node: build: context: . dockerfile: ./docker-build/Dockerfile.node restart: always en

我无法为版本3中指定的服务指定CPU和内存

对于版本2,它可以在服务下的“mem_limit”和“cpu_shares”参数下正常工作。但在使用版本3时失败了,除非我使用swarm模式,否则将它们放在部署部分似乎不值得

有人能帮忙吗

version: "3"
services:
  node:
    build:
     context: .
      dockerfile: ./docker-build/Dockerfile.node
    restart: always
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    expose:
      - 8083
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
更多:

在您的具体情况下:

version: "3"
services:
  node:
    image: USER/Your-Pre-Built-Image
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M
        reservations:
          cpus: '0.0001'
          memory: 20M

volumes:
  - logs

networks:
  default:
    driver: overlay
注意:

  • Expose不是必需的,它将根据堆栈网络上的默认值公开
  • 图像必须预先构建。不可能在v3中构建
  • “重新启动”也不推荐使用。您可以使用“部署”下的“重新启动”和“发生故障时”操作
  • 您可以使用一个独立的单节点“swarm”,v3大多数改进(如果不是全部的话)都是针对swarm的
另请注意: 群模式下的网络不桥接。如果只想在内部连接,则必须连接到网络。您可以1)在其他compose文件中指定外部网络,或者必须使用--attachable参数创建网络(docker network create-d overlay My network--attachable) 否则,您必须按如下方式发布端口:

ports:
  - 80:80

Docker Compose不支持
deploy
键。只有当您在Docker堆栈中使用版本3 YAML文件时,才考虑使用它

deploy
键添加到
docker compose.yml
文件,然后运行
docker compose up-d

警告:某些服务(数据库)使用“deploy”键,这将是 忽略。Compose不支持“部署”配置-使用
docker
堆栈部署
部署到群集

文件()说:

指定与的部署和运行相关的配置 服务。这仅在使用docker部署到swarm时生效 堆栈部署,docker compose up和docker compose会忽略它 跑


我知道这个话题有点过时,但无论如何,我可以使用以下选项:

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M
使用docker compose的3.7版本时

在我的情况下,有帮助的是使用以下命令:

docker compose——兼容性升级

--兼容性
标志代表(取自文档):

如果设置,Compose将尝试将v3文件中的部署密钥转换为 它们的非群等价物


我认为这很好,我不必将docker compose文件恢复到v2。

1。我能够使用版本3构建图像
2。看起来v3的方法和v2完全不同,不像升级
3。部署似乎只在群集模式下工作。我收到警告-
“警告:某些服务(节点)使用“部署”键,该键将被忽略。Compose不支持部署配置-使用
docker stack deploy
部署到swarm。”@viveky4d4v作为Compose格式v3文档的状态,如果不使用swarm,则忽略
deploy
。除非您使用Swarm,否则没有理由使用v3格式。如果开始新的部署,我会从v3开始。即使我只有一个主人。所以你有可能在以后扩展,这和你理解这个概念后所需要的时间是一样的。嗨,康纳,当我编辑答案时,我所做的只是纠正一个断开的链接。和您一样,我也无法理解“仅内部”在这里的含义。@Berndinox您是否知道如何设置在中提到的
内存交换
选项?我没有看到如何在
docker compose.yml
()中设置它的示例。非常感谢。提供docker compose项目中创建的相关问题的链接:特别是文档中说,如果您想这样做,请使用v2或部署到swarm。使用docker compose 3.7,您可以添加--compatibility标志,它将把3.x文件中的部署限制转换为非swarm执行。e、 g.docker compose--compatibility Supporte是指向@DavidThomas提到的
--compatibility
标志的文档链接:感谢您指出这一点。。。但它仍然存在一个问题:如何简单地在docker compose文件中对每个容器应用内存限制?这可能会提供一些背景知识。。。但毕竟,需要在docker compose之外运行另一个应用程序来简单地限制硬件资源,这显然不是最佳选择……有趣的是,这个选项有一个“转换是一种“尽力而为”的尝试,不应该依赖于生产部署。”这是一个很好的解决方案,适用于设计拙劣的程序,docker撰写。docker compose正试图成为一个生产级的编排器:如果容器RAM/CPU>docker for Windows/Mac可用,您的资源约束将不会生效。要更改此设置,请转到Docker for Mac/Windows preferences->resources并进行相应调整。为什么在此处使用非整数CPU:“0.001”?是“一个还是没有”?来自@four43的感谢链接仍然是金色的:——
    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M