web-dev-qa-db-de.com

Festlegen des Speicher- und CPU-Grenzwerts in Docker Compose Version 3

Ich kann für die in Version 3 angegebenen Dienste keine CPU und keinen Arbeitsspeicher angeben.

In Version 2 funktioniert dies problemlos mit den Parametern "mem_limit" und "cpu_shares" unter den Diensten. Aber es schlägt fehl, wenn Sie Version 3 verwenden. Wenn Sie diese in den Bereitstellungsabschnitt stellen, ist dies nur dann sinnvoll, wenn Sie den Schwarmmodus verwenden.

Kann jemand helfen?

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

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

In Ihrem speziellen Fall:

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

Hinweis:

  • Das Exponieren ist nicht erforderlich, es wird standardmäßig in Ihrem Stack-Netzwerk exponiert.
  • Bilder müssen vorab erstellt werden. Build in v3 ist nicht möglich
  • "Neustart" ist ebenfalls veraltet. Sie können den Neustart unter Bereitstellung mit Aktion bei Fehler verwenden
  • Sie können einen eigenständigen Knoten "swarm" verwenden. Die meisten Verbesserungen in Version 3 (wenn nicht alle) gelten für swarm

Beachten Sie auch: Netzwerke im Schwarmmodus überbrücken nicht. Wenn Sie nur eine interne Verbindung herstellen möchten, müssen Sie eine Verbindung zum Netzwerk herstellen. Sie können 1) ein externes Netzwerk in einer anderen Compose-Datei angeben oder das Netzwerk mit dem Parameter --attachable erstellen (Docker-Netzwerk create -d overlay My-Network --attachable). Andernfalls müssen Sie den Port wie folgt veröffentlichen:

ports:
  - 80:80
38
Berndinox

Docker Compose unterstützt die Taste deploy nicht . Dies wird nur beachtet, wenn Sie Ihre YAML-Datei der Version 3 in einem Docker-Stapel verwenden.

Diese Meldung wird gedruckt, wenn Sie der Datei docker-compose.yml Den Schlüssel deploy hinzufügen und dann docker-compose up -d Ausführen.

WARNUNG: Einige Dienste (Datenbanken) verwenden den Bereitstellungsschlüssel, der ignoriert wird. Compose unterstützt keine 'Deployment'-Konfiguration. Verwenden Sie docker stack deploy, Um die Implementierung in einem Schwarm durchzuführen.

In der Dokumentation ( https://docs.docker.com/compose/compose-file/#deploy ) heißt es:

Geben Sie die Konfiguration für die Bereitstellung und Ausführung von Diensten an. Dies wirkt sich nur bei der Bereitstellung in einem Schwarm mit Docker-Stack-Bereitstellung aus und wird bei der Ausführung von Docker-Compose-Up und Docker-Compose ignoriert.

29
saw303

Ich weiß, dass das Thema ein bisschen alt und veraltet ist, aber ich konnte trotzdem die folgenden Optionen verwenden:

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

bei Verwendung der Version 3.7 von Docker-Compose

Was in meinem Fall geholfen hat, war die Verwendung dieses Befehls:

docker-compose --compatibility up

--compatibility flag steht für (aus der Dokumentation entnommen):

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

Ich finde es großartig, dass ich meine Docker-Compose-Datei nicht auf v2 zurücksetzen muss.

3
Rigi