Как мне запретить службе Docker постоянно использовать всю выделенную ей оперативную память на моем хосте?

Как мне запретить службе Docker постоянно использовать всю выделенную ей оперативную память на моем хосте?

Служба docker в Windows 10, похоже, всегда использует максимальный объем памяти, который ей разрешено выделить. Например, когда я увеличил память в разделе Resources -> Advanced с 2 ГБ до 8 ГБ и нажал «Apply & Restart», в диспетчере задач произошло следующее:

введите описание изображения здесь

Как заставить Docker использовать память только тогда, когда это необходимо запущенным контейнерам, а не просто пожирать ее всю?

В настоящее время контейнеры не запущены, работает только служба.

решение1

Хотя Docker отличается от полной аппаратной виртуализации, он по-прежнему функционирует во многом так же и по тем же причинам.

Гипервизоры резервируют заданный объем памяти для того, чтобы эта память была доступна им и контейнерам (или виртуальным машинам), когда она им потребуется, без необходимости запрашивать эту память у ОС.

Настройка, которую вы устанавливаете, предназначена специально для этой цели и ведет себя именно так, как вы наблюдали, именно по этой причине. Это не ошибка, и изменить ее поведение — значит переписать базовое поведение Docker.

Итак, ничего не сломалось и все работает так, как и должно.

Я настоятельно рекомендую вам почитать о резервировании памяти в Docker, чтобы лучше понять, как и почему. Docker — это зрелый продукт, и я полагаю, он хорошо документирован.

Чтобы «решить» проблему, с которой вы столкнулись, установите больше памяти или более тщательно спланируйте потребности Docker в памяти и используйте эту настройку так, как она была задумана, а не просто так, как вы делаете сейчас.

решение2

Запуск новых версий docker desktop с бэкэндом WSL2 решает эту проблему. Я не могу дать больше подробностей, так как сам не очень хорошо в этом разбираюсь, но я установил WSL2 и заметил, что docker теперь выделяет память динамически.

Docker Desktop использует функцию динамического распределения памяти в WSL 2 для значительного улучшения потребления ресурсов. Это означает, что Docker Desktop использует только необходимое количество ресурсов ЦП и памяти, позволяя при этом значительно ускорить выполнение задач, интенсивно использующих ЦП и память, таких как сборка контейнера.

Источник:Docker Desktop WSL 2 бэкэнд

Связанный контент