Есть ли в контейнерах Docker Windows с Docker Desktop для Windows ограничение памяти по умолчанию? У меня есть приложение, которое аварийно завершает работу, когда я запускаю его в контейнере, но когда я попытался указать параметр --memory 2048mb
для команды docker run
кажется, что он работает нормально. По крайней мере, в сценарии, где он падал раньше. Это создает у меня впечатление, что по умолчанию существует ограничение памяти, но я не смог найти его в документации. Итак, мой вопрос, есть ли предел памяти, и если это где это задокументировано?
Предел памяти контейнера для докеров
Ответ 1
Согласно сообщениям о Docker для Windows Github (https://github.com/moby/moby/issues/31604), когда Docker для Windows работает под Windows 10, он фактически использует модель изоляции Hyper-V (и процесс модель недоступна в сценарии Win 10).
И в этом типе изоляции ваш контейнер запускается внутри облегченной виртуальной машины, для которой установлен предел по умолчанию, равный 1 ГБ. Поэтому, если вы хотите иметь больше памяти, вы должны использовать параметр -m.
Ответ 2
Сюрприз! Сюрприз!
У меня на хосте 32 ГБ ОЗУ, но я вижу только 1 ГБ ОЗУ для контейнеров 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
То же ограничение на изображения, сделанные из:
- Microsoft/windowsservercore
- Microsoft/nanoserver
Я думаю, что это происходит из слоя Hyper-V в режиме --isolation=hyperv
, где контейнер - это своего рода легкая виртуальная машина.
Вы можете проверить режим изоляции, используемый для существующего контейнера, с помощью команды docker inspect
.
Ответ 3
Я думаю, может быть, у вас слишком много мертвых контейнеров. Возможно, попробуйте docker rm $(docker ps -a -q)
удалить все выведенные контейнеры и повторите попытку запуска требуемого контейнера.
Ответ 4
Нет ограничений по умолчанию. Документировано здесь
Ответ 5
Недавно у нас возникла очень схожая проблема и вопрос, поэтому были сделаны некоторые эксперименты с памятью докеров в окнах:
Кажется, что это сильно зависит от вашей конфигурации. Если вы запустите контейнеры докеров, позвоните в режим hyper-v, предел памяти составляет около 512 Мб. Вы можете расширить данную память с помощью опции "-m" для запуска докеров. Назначение 2 gb не было проблемой.
К сожалению, это совершенно другое для контейнеров серверов Windows. Там начальный предел памяти составляет 1 гб, и вы можете уменьшить его с помощью опции "-m". Мы не нашли способ увеличить объем памяти для этих контейнеров.
Как вы видите свой режим/уровень изоляции:
docker info -f "{{ .Isolation }}"
hyperv - режим hyper-v; процесс - это сервер Windows
Некоторые дополнительные примечания: очень сложно найти команду, которая выводит доступную память в контейнер. Мы создали собственный тест производительности для надежных результатов.
Ответ 6
Запустите Docker QuickStart Terminal
Удалить по умолчанию 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.
Теперь, когда вы запустите и создадите новый контейнер, у вас будет больше оперативной памяти по умолчанию. Но будьте осторожны, это удалит уже все вытащенные изображения докера.
Ответ 7
Если используется контейнер Linux
Для меня в Windows 10 с использованием Docker Desktop я не мог заставить --memory=
параметры --memory=
и --cpus=
. Вот что работает:
- Щелкните правой кнопкой мыши на Docker кит в системном трее и выберите "Настройки"
- Перейти к "Advanced" слева
- Установите, сколько процессоров и памяти доступно для контейнеров здесь.