docker composeバージョン3でメモリとCPUの制限を指定する方法


110

バージョン3で指定されたサービスのCPUとメモリを指定できません。

バージョン2では、サービスの「mem_limit」および「cpu_shares」パラメーターで正常に動作します。しかし、バージョン3を使用している間は失敗します。スウォームモードを使用していない限り、それらを配置セクションに配置することは価値がないようです。

誰か助けてもらえますか?

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

回答:


90

トピックは少し古くて古くなっているようですが、とにかくこれらのオプションを使用できました:

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

3.7バージョンのdocker-composeを使用する場合

私の場合に役立ったのは、次のコマンドの使用でした。

docker-compose --compatibility up

--compatibility フラグは(ドキュメントから取得)を表します:

設定されている場合、Composeはv3ファイルのデプロイキーを同等の非スウォームに変換しようとします

docker-composeファイルをv2に戻す必要がないことは素晴らしいことだと思います。


4
このオプションにメモがあることは興味深いです:「変換は「ベストエフォート」の試みであり、本番環境への展開に依存するべきではありません。」
bartolo-otrit

3
これは、設計が不十分なプログラムであるdocker-composeの優れた修正です。docker-composeは、プロダクショングレードのオーケストレーターであるように、一生懸命頑張っています:github.com/docker/compose/issues/4513
four43

1
コンテナのRAM / CPU> Docker for Windows / Macが利用可能な場合、リソースの制約は有効になりません。これを変更するには、Docker for Mac / Windowsの設定->リソースに移動し、それに応じて調整します。
8bitme

58
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内でのビルドはできません
  • 「再起動」も廃止されました。デプロイ時の再起動を失敗時のアクションで使用できます
  • スタンドアロンの1ノード「スウォーム」を使用できます。v3のほとんどすべての改良点がスウォーム用です。

また、注: Swarmモードのネットワークはブリッジしません。内部でのみ接続する場合は、ネットワークに接続する必要があります。1)他の構成ファイル内で外部ネットワークを指定するか、または--attachableパラメーター(docker network create -d overlay My-Network --attachable)を使用してネットワークを作成する必要があります。それ以外の場合は、次のようにポートを公開する必要があります。

ports:
  - 80:80

6
1.バージョン3を使用してイメージをビルドできます。<br/> 2. v3のアプローチは、アップグレードのようではなく、v2とは完全に異なるようです。<br/> 3.デプロイはスウォームモードでのみ機能しているようです。警告が表示されます-<br/>「警告:一部のサービス(ノード)は 'Deploy'キーを使用しますが、無視されます。Composeはデプロイ構成をサポートしていませんdocker stack deploy
-swarm

23
@ viveky4d4v Compose形式v3ドキュメントに記載deployされているように、Swarmを使用していない場合は無視されます。Swarmを使用していない限り、v3形式を使用する理由は本当にありません。
Dan Lowe

2
新しい展開を開始する場合、私はv3から始めます。ホストが1つしかない場合でも。したがって、後でスケーリングする可能性があり、概念を理解したら、必要な時間と同じ時間です。
Berndinox 2017

1
こんにちは@Connor、私が答えを編集したとき私がしたことは壊れたリンクを修正することだけでした。あなたのように、私は「内部のみ」がここで意味することを解読することができません。
ジェイテイラー

3
@Berndinox Doがあなたが設定する方法を知ることが起こるmemory-swapで述べたオプションdocs.docker.com/v17.12/config/containers/resource_constraints/...をdocker-compose.ymldocs.docker.com/v17.12/compose/compose-file/#resources)に設定する方法の例がありません。本当にありがとう。
ライアン

49

Docker Compose deployキーをサポートしいません。Dockerスタックでバージョン3 YAMLファイルを使用する場合にのみ尊重されます。

このメッセージは、ファイルにdeployキーを追加してdocker-compose.yml実行すると表示されますdocker-compose up -d

警告:一部のサービス(データベース)は「デプロイ」キーを使用しますが、無視されます。Composeは「デプロイ」構成をサポートしていません- docker stack deployスウォームへのデプロイに使用します。

ドキュメント(https://docs.docker.com/compose/compose-file/#deploy)は言う:

サービスの展開と実行に関連する構成を指定します。これは、Dockerスタックデプロイでスウォームにデプロイする場合にのみ有効で、docker-compose upおよびdocker-compose runでは無視されます。


2
具体的には、ドキュメントには、これを行う場合はv2を使用するか、swarmにデプロイすることが記載されています。
ic_fl2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.