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?
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.
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:
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.
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:
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.
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é.
Aucune limite par défaut. Documenté ici
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.