Windows用Dockerデスクトップを指定したdocker windowsコンテナーには、デフォルトのメモリ制限がありますか?コンテナで実行するとクラッシュするアプリケーションがありますが、--memory 2048mb
パラメータをdocker run
コマンドは正常に実行されるようです。少なくとも以前はクラッシュしていたシナリオでは。これにより、デフォルトのメモリ制限があるように感じますが、ドキュメントで見つけることができませんでした。だから私の質問は、メモリ制限があり、それが文書化されている場所である場合ですか?
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を使用する必要があります。
驚き!驚き!
ホスト上に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
以下から作成された画像にも同じ制限があります:
コンテナが何らかの軽量VMである--isolation=hyperv
モードのHyper-Vレイヤーから来ていると思います。
docker inspect
コマンドを使用して、既存のコンテナーに使用されている分離モードを確認できます。
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メモリがデフォルトになります。ただし、プルされたすべてのドッカーイメージが既に削除されることに注意してください。
死んだコンテナが多すぎるのかもしれません。 docker rm $(docker ps -a -q)
を試して、終了したコンテナをすべて削除してから、目的のコンテナの実行を再試行してください。
デフォルトの制限はありません。文書化 ここ
最近、非常によく似た問題と質問がありました。そのため、Windowsのdockerメモリでいくつかの実験を行いました。
構成に大きく依存しているようです。 Dockerコンテナを実行する場合、hyper-vモードと呼びます。メモリの制限は約512MBのようです。 docker runの「-m」オプションを使用して、指定されたメモリを拡張できます。 2 GBを割り当てることは問題ではありません。
残念ながら、Windowsサーバーコンテナではまったく異なります。開始時のメモリ制限は1 GBであり、「-m」オプションを使用して減らすことができます。これらのコンテナのメモリを増やす方法は見つかりませんでした。
モード/分離レベルの表示方法:
docker info -f "{{ .Isolation }}"
hyperv-hyper-vモード; プロセスはWindowsサーバーです
いくつかの追加のメモ:コンテナー内の使用可能なメモリを出力するコマンドを見つけるのは非常に困難です。信頼できる結果を得るために、独自のパフォーマンステストを作成しました。