web-dev-qa-db-fra.com

Comment spécifier la limite de mémoire et d'UC dans docker Compose version 3

Je ne parviens pas à spécifier le processeur et la mémoire pour les services spécifiés dans la version 3.

Avec la version 2, cela fonctionne bien avec les paramètres "mem_limit" & "cpu_shares" sous les services. Mais cela échoue lors de l'utilisation de la version 3, les placer dans la section deploy ne semble pas digne d'intérêt sauf si j'utilise le mode swarm.

Quelqu'un peut aider?

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
64
vivekyad4v
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

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

Dans votre cas spécifique:

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

Remarque:

  • Exposer n'est pas nécessaire, il sera exposé par défaut sur votre réseau de pile.
  • Les images doivent être pré-construites. Construire dans la v3 n'est pas possible
  • "Redémarrer" est également déconseillé. Vous pouvez utiliser le redémarrage sous déployer avec une action en cas d'échec
  • Vous pouvez utiliser un seul nœud "swarm", la plupart des améliorations v3 (sinon toutes) concernent swarm.

Remarque: Les réseaux en mode Swarm ne pontent pas. Si vous souhaitez vous connecter uniquement en interne, vous devez vous connecter au réseau. Vous pouvez 1) spécifier un réseau externe dans un autre fichier de composition ou créer le réseau avec le paramètre --attachable (réseau docker créer -d superposer My-Network --attachable). Sinon, vous devez publier le port comme suit:

ports:
  - 80:80
38
Berndinox

Docker Compose ne prend pas en charge la touche deploy. Il n’est respecté que lorsque vous utilisez votre fichier YAML version 3 dans une pile Docker.

Ce message est imprimé lorsque vous ajoutez la touche deploy à votre fichier docker-compose.yml, puis que vous exécutez docker-compose up -d.

AVERTISSEMENT: Certains services (base de données) utilisent la clé 'deploy', qui sera ignorée. Compose ne prend pas en charge la configuration 'deploy' - utilisez docker stack deploy pour le déployer sur un essaim.

La documentation ( https://docs.docker.com/compose/compose-file/#deploy ) indique:

Spécifiez la configuration liée au déploiement et à l'exécution des services. Cela ne prend effet que lors du déploiement sur un essaim avec déploiement de la pile de docker, et est ignoré par docker-compose up et docker-composition run.

29
saw303

Je sais que le sujet est un peu vieux et semble obsolète, mais j'ai quand même pu utiliser ces options:

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

lors de l'utilisation de la version 3.7 de docker-compose

Ce qui a aidé dans mon cas, utilisait cette commande:

docker-compose --compatibility up

Le drapeau --compatibility signifie (tiré de la documentation):

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

Je trouve ça génial de ne pas avoir à reconvertir mon fichier de composition de docker en v2.

3
Rigi