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

110

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

Mit Version 2 funktioniert es gut mit den Parametern "mem_limit" und "cpu_shares" unter den Diensten. Aber es schlägt fehl, wenn Sie Version 3 verwenden. Wenn Sie sie in den Bereitstellungsbereich stellen, ist dies nur dann sinnvoll, wenn ich den Schwarmmodus verwende.

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
vivekyad4v
quelle
3
Stellen Sie einen Link zu einem verwandten Problem bereit, das im Docker-Compose-Projekt erstellt wurde: github.com/docker/compose/issues/4513
Guillaume Husta

Antworten:

89

Ich weiß, dass das Thema etwas alt ist und veraltet zu sein scheint, aber trotzdem konnte ich diese 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):

Wenn diese Option aktiviert ist, versucht Compose, Bereitstellungsschlüssel in v3-Dateien in ihre Nicht-Swarm-Entsprechung zu konvertieren

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

Rigi
quelle
4
Es ist interessant, dass diese Option einen Hinweis enthält : "Die Konvertierung ist ein" Best-Effort "-Versuch und sollte nicht für Produktionsbereitstellungen verwendet werden."
Bartolo-Otrit
2
Dies ist eine großartige Lösung für ein schlecht gestaltetes Programm, Docker-Compose. Docker-Compose ist zu bemüht, das zu sein, was es nicht ist, ein Orchestrator in Produktionsqualität: github.com/docker/compose/issues/4513
four43
1
Ihre Ressourcenbeschränkungen werden nicht wirksam, wenn Container RAM / CPU> Docker für Windows / Mac verfügbar ist. Um dies zu ändern, gehen Sie zu Docker für Mac / Windows-Einstellungen-> Ressourcen und passen Sie sie entsprechend an.
8bitme
58
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

Weitere Informationen : 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:

  • Expose ist nicht erforderlich, wird standardmäßig in Ihrem Stack-Netzwerk verfügbar gemacht.
  • Bilder müssen vorgefertigt werden. Build in v3 ist nicht möglich
  • "Neustart" ist ebenfalls veraltet. Sie können Neustart unter Bereitstellen mit Aktion bei einem Fehler verwenden
  • Sie können einen eigenständigen "Schwarm" für einen Knoten verwenden. Die meisten Verbesserungen (wenn nicht alle) in Version 3 gelten für den Schwarm

Beachten Sie auch: Netzwerke im Schwarmmodus werden nicht überbrückt. 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 Erstellungsdatei angeben oder das Netzwerk mit dem Parameter --attachable erstellen (Docker-Netzwerk erstellen -d Overlay My-Network --attachable). Andernfalls müssen Sie den Port wie folgt veröffentlichen:

ports:
  - 80:80
Berndinox
quelle
6
1. Ich kann Bilder mit Version 3 erstellen. <br/> 2. Es scheint, dass der Ansatz für v3 völlig anders ist als für v2, nicht wie ein Upgrade. <br/> 3. Deploy scheint nur im Schwarmmodus zu funktionieren. Ich erhalte Warnungen - <br/> "WARNUNG: Einige Dienste (Knoten) verwenden den Schlüssel" Bereitstellen ", der ignoriert wird. Compose unterstützt die Bereitstellungskonfiguration nicht - wird docker stack deployzum Bereitstellen auf einem Schwarm verwendet."
vivekyad4v
23
@ viveky4d4v Wie im Dokument "Compose Format v3" angegeben, deploywird es ignoriert, wenn Sie Swarm nicht verwenden. Es gibt wirklich keinen Grund, das v3-Format zu verwenden, es sei denn, Sie verwenden Swarm.
Dan Lowe
2
Wenn ich eine neue Bereitstellung starte, würde ich mit v3 beginnen. Auch wenn ich nur einen Host habe. Sie haben also die Möglichkeit, später zu skalieren, und es ist dieselbe Zeit, die Sie benötigen, sobald Sie das Konzept verstanden haben.
Berndinox
1
Hallo @Connor, als ich die Antwort bearbeitet habe, habe ich nur einen defekten Link korrigiert. Wie Sie kann ich hier nicht entschlüsseln, was "nur intern" bedeutet.
Jay Taylor
3
@Berndinox Wissen Sie zufällig, wie Sie die memory-swapunter docs.docker.com/v17.12/config/containers/resource_constraints/… erwähnte Option einstellen ? Ich sehe kein Beispiel für die Einstellung docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ). Vielen Dank.
Ryan
49

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

Diese Nachricht wird gedruckt, wenn Sie den deploySchlüssel zu Ihrer docker-compose.ymlDatei hinzufügen und dann ausführendocker-compose up -d

WARNUNG: Einige Dienste (Datenbank) verwenden den Bereitstellungsschlüssel, der ignoriert wird. Compose unterstützt die Konfiguration "Bereitstellen" nicht - wird docker stack deployzum Bereitstellen auf einem Schwarm verwendet.

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 wird nur bei der Bereitstellung in einem Schwarm mit Docker-Stack-Bereitstellung wirksam und wird von Docker-Compose-Up und Docker-Compose-Lauf ignoriert.

saw303
quelle
2
In den Dokumenten wird insbesondere angegeben, ob Sie dies tun, v2 verwenden oder zum Schwärmen bereitstellen möchten.
ic_fl2