web-dev-qa-db-fra.com

Limite de mémoire du conteneur Windows Docker

Les conteneurs Windows Docker, avec Docker Desktop pour Windows, ont-ils une limite de mémoire par défaut? J'ai une application qui plantait lorsque je l'exécutais dans le conteneur, mais quand j'ai essayé de spécifier --memory 2048mb paramètre au docker run commande, il semble fonctionner correctement. Au moins dans le scénario où il plantait auparavant. Cela me donne l'impression qu'il y a une limite de mémoire par défaut, mais je ne l'ai pas trouvée dans la documentation. Donc ma question est la limite de mémoire et si c'est là qu'elle est documentée?

16
Andrey M.

Selon les discussions sur Docker pour Windows, les problèmes Github ( https://github.com/moby/moby/issues/31604 ), lorsque Docker pour Windows est exécuté sous Windows 10, il utilise en fait un Hyper -V modèle d'isolement (et le modèle de processus n'est pas accessible dans le scénario Win 10).

Et dans ce type d'isolement, votre conteneur est exécuté dans une machine virtuelle légère, qui a une limite par défaut, et il est de 1 Go. Donc, si vous voulez avoir plus de mémoire, vous devez utiliser -m param.

17
deafsheep

Surprise! Surprise!

J'ai 32 Go RAM sur mon hôte mais je ne peux voir que 1 Go RAM donné aux conteneurs Windows:

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

La même limite sur les images réalisées à partir de:

  • Microsoft/windowsservercore
  • Microsoft/nanoserver

Je pense que cela vient de la couche Hyper-V dans --isolation=hyperv mode, où un conteneur est une sorte de machine virtuelle légère.

Vous pouvez vérifier le mode d'isolement utilisé pour votre conteneur existant par docker inspect commande.

7
Ivan

Si vous utilisez un conteneur Linux

Pour moi, sur Windows 10 à l'aide de Docker Desktop, je n'ai pas pu obtenir le --memory= et --cpus= options de travail. Voici ce qui fonctionne:

  1. Faites un clic droit sur la baleine Docker dans la barre d'état système et choisissez "Paramètres"
  2. Allez dans "Avancé" à gauche
  3. Définissez ici le nombre de CPU et de mémoire disponibles pour les conteneurs.

enter image description here

5
Ryan Shillington

Exécutez Docker QuickStart Terminal

Supprimez le VM par défaut:

docker-machine rm default

Recréez la VM par défaut: en fonction de vos besoins, vous pouvez modifier les valeurs des différents paramètres ci-dessous.

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

Alors fais

docker-machine stop
exit

Ouvrez à nouveau le terminal de démarrage rapide Docker

Maintenant, lorsque vous exécutez et créez un nouveau conteneur, vous aurez plus de mémoire RAM par défaut. Mais attention, cela supprimera déjà toutes les images de docker extraites.

1
user3432888

Je pense que vous pourriez avoir trop de conteneurs morts. Essayez peut-être docker rm $(docker ps -a -q) pour supprimer tous les conteneurs sortis, puis réessayez d'exécuter le conteneur souhaité.

0
Bill Cheng

Aucune limite par défaut. Documenté ici

0
Myles Keating

Nous avons récemment eu un problème et une question très similaires et avons donc fait quelques expériences avec la mémoire Docker sur Windows:

Il semble que cela dépende fortement de votre configuration. Si vous exécutez des conteneurs Docker dans, appelons-le mode hyper-v, la limite de mémoire semble être d'environ 512 Mo. Vous pouvez étendre la mémoire donnée avec l'option "-m" pour l'exécution de docker. L'attribution de 2 Go n'a pas été un problème.

Malheureusement, c'est totalement différent pour les conteneurs de serveur Windows. Là, la limite de mémoire de départ est de 1 Go et vous pouvez la diminuer avec l'option "-m". Nous n'avons pas trouvé de moyen d'augmenter la mémoire de ces conteneurs.

Comment voyez-vous votre mode/niveau d'isolement:

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

hyperv - mode hyper-v; processus est un serveur Windows

Quelques notes supplémentaires: Il est très difficile de trouver une commande qui génère la mémoire disponible dans un conteneur. Nous avions créé notre propre test de performance pour des résultats fiables.

0
mugbi