Предел памяти контейнера для докеров

Есть ли в контейнерах 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=. Вот что работает:

  1. Щелкните правой кнопкой мыши на Docker кит в системном трее и выберите "Настройки"
  2. Перейти к "Advanced" слева
  3. Установите, сколько процессоров и памяти доступно для контейнеров здесь.

enter image description here