web-dev-qa-db-ja.com

Docker Windowsコンテナーのメモリ制限

Windows用Dockerデスクトップを指定したdocker windowsコンテナーには、デフォルトのメモリ制限がありますか?コンテナで実行するとクラッシュするアプリケーションがありますが、--memory 2048mbパラメータをdocker runコマンドは正常に実行されるようです。少なくとも以前はクラッシュしていたシナリオでは。これにより、デフォルトのメモリ制限があるように感じますが、ドキュメントで見つけることができませんでした。だから私の質問は、メモリ制限があり、それが文書化されている場所である場合ですか?

16
Andrey M.

Docker for Windows Githubの問題に関する講演( https://github.com/moby/moby/issues/31604 )によると、Docker for WindowsをWindows 10で実行すると、実際にはHyper -V分離モデル(およびWin 10シナリオではプロセスモデルにアクセスできません)。

そして、その分離タイプでは、コンテナは軽量のVM内で実行されます。これにはデフォルトの制限があり、1 Gbです。したがって、より多くのメモリが必要な場合は、-m paramを使用する必要があります。

17
deafsheep

驚き!驚き!

ホスト上に32Gb RAMがありますが、Windowsコンテナに指定された1Gb RAMのみが表示されます。

D:\>systeminfo | findstr "Memory"
Total Physical Memory:     1,023 MB
Available Physical Memory: 634 MB
Virtual Memory: Max Size:  1,023 MB
Virtual Memory: Available: 674 MB
Virtual Memory: In Use:    349 MB

D:\>wmic OS get FreePhysicalMemory /Value
FreePhysicalMemory=648340

D:\>wmic computersystem get TotalPhysicalMemory
TotalPhysicalMemory
1072742400

以下から作成された画像にも同じ制限があります:

  • Microsoft/windowsservercore
  • Microsoft/nanoserver

コンテナが何らかの軽量VMである--isolation=hypervモードのHyper-Vレイヤーから来ていると思います。

docker inspectコマンドを使用して、既存のコンテナーに使用されている分離モードを確認できます。

7
Ivan

Linuxコンテナーを使用している場合

私にとって、Docker Desktopを使用しているWindows 10では、--memory=および--cpus=動作するオプション。動作するものは次のとおりです。

  1. システムトレイでDockerクジラを右クリックし、[設定]を選択します
  2. 左側の「詳細」に移動します
  3. ここで、コンテナで使用できるCPUとメモリの数を設定します。

enter image description here

5

Docker QuickStartターミナルを実行する

デフォルトのvmを削除します。

docker-machine rm default

デフォルトのvmを再作成します。要件に応じて、以下のさまざまなパラメーターの値を変更できます。

docker-machine create -d virtualbox --virtualbox-cpu-count=2 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

それから

docker-machine stop
exit

Dockerクイックスタートターミナルをもう一度開きます

これで、新しいコンテナを実行して作成すると、より多くのRAMメモリがデフォルトになります。ただし、プルされたすべてのドッカーイメージが既に削除されることに注意してください。

1
user3432888

死んだコンテナが多すぎるのかもしれません。 docker rm $(docker ps -a -q)を試して、終了したコンテナをすべて削除してから、目的のコンテナの実行を再試行してください。

0
Bill Cheng

デフォルトの制限はありません。文書化 ここ

0
Myles Keating

最近、非常によく似た問題と質問がありました。そのため、Windowsのdockerメモリでいくつかの実験を行いました。

構成に大きく依存しているようです。 Dockerコンテナを実行する場合、hyper-vモードと呼びます。メモリの制限は約512MBのようです。 docker runの「-m」オプションを使用して、指定されたメモリを拡張できます。 2 GBを割り当てることは問題ではありません。

残念ながら、Windowsサーバーコンテナではまったく異なります。開始時のメモリ制限は1 GBであり、「-m」オプションを使用して減らすことができます。これらのコンテナのメモリを増やす方法は見つかりませんでした。

モード/分離レベルの表示方法:

docker info -f "{{ .Isolation }}"

hyperv-hyper-vモード; プロセスはWindowsサーバーです

いくつかの追加のメモ:コンテナー内の使用可能なメモリを出力するコマンドを見つけるのは非常に困難です。信頼できる結果を得るために、独自のパフォーマンステストを作成しました。

0
mugbi