如何指定记忆和docker中的CPU限制构成版本3

时间:2017-02-20 12:59:05

标签: docker docker-compose

我无法指定CPU&版本3中指定的服务的内存。

使用版本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

3 个答案:

答案 0 :(得分:36)

deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

更多:https://docs.docker.com/compose/compose-file/#resources

在特定情况下:

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

注意:

  • 没有必要公开,它将在您的堆栈网络上默认公开。
  • 必须预先构建图像。无法在v3中构建
  • “重新启动”也已弃用。您可以在部署时使用重启时启用失败操作
  • 你可以使用独立的一个节点“swarm”,v3大多数改进(如果不是全部)都是针对swarm的

另请注意: Swarm模式下的网络不会桥接。如果您只想在内部连接,则必须连接到网络。您可以1)在其他撰写文件中指定外部网络,或者必须使用--attachable参数创建网络(docker network create -d overlay My-Network --attachable) 否则你必须像这样发布端口:

ports:
  - 80:80

答案 1 :(得分:16)

Docker Compose 不支持 deploy键。仅当您在Docker堆栈中使用版本3的YAML文件时,才会受到尊重。

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

时,将显示此消息。
  

警告:某些服务(数据库)使用“ deploy”键,该键为   忽略了。 Compose不支持“部署”配置-使用docker stack deploy部署到群集。

文档(https://docs.docker.com/compose/compose-file/#deploy)说:

  

指定与部署和运行有关的配置   服务。这仅在使用docker部署到集群时生效   堆栈部署,并被docker-compose up和docker-compose忽略   运行。

答案 2 :(得分:0)

我知道这个话题有点老,看起来很陈旧,但是无论如何我都可以使用这些选项:

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M

使用3.7版的docker-compose时

对我来说有帮助的是使用以下命令:

docker-compose ---compatibility up

--compatibility标志代表(摘自文档):

If set, Compose will attempt to convert deploy keys in v3 files to their non-Swarm equivalent

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