Как выделить больше памяти для контейнера докеров

118

Как видно из заголовка, я пытаюсь выделить больше памяти для своего контейнера. Я использую образ из docker-хаба под названием «aallam / tomcat-mysql», если это актуально.

Когда я запускаю его в обычном режиме без каких-либо специальных флагов, есть ограничение памяти в 2 ГБ (хотя я читал, что память неограничена, если не установлена)

Вот моя статистика докеров

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

Я пробовал явно настроить память, но с такими же результатами

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

Я читал, что, возможно, это ограничивает виртуальная машина. Но тогда почему статистика докеров показывает, что ограничение на размер контейнера составляет 2 ГБ?

Кейн
источник

Ответы:

204

Этот 2GBпредел, который вы видите, - это общая память виртуальной машины, в которой работает докер.

Если вы используете docker-for-windows или docker-for-mac, вы можете легко увеличить его с помощью значка Whale 🐳 на панели задач, затем перейдите в Настройки -> Дополнительно:

Настройки Docker

Но если вы используете VirtualBox позади, откройте VirtualBox, выберите и настройте память, назначенную докер-машине.

См. Это для Mac:

https://docs.docker.com/docker-for-mac/#memory

ПАМЯТЬ По умолчанию Docker для Mac настроен на использование 2 ГБ оперативной памяти, выделенной из общей доступной памяти на вашем Mac. Вы можете увеличить объем оперативной памяти в приложении, чтобы повысить производительность, установив это число выше (например, до 3) или ниже (до 1), если вы хотите, чтобы Docker для Mac использовал меньше памяти.

Для Windows:

https://docs.docker.com/docker-for-windows/#advanced

Память - изменение объема памяти, используемой Docker для Windows Linux VM.

Роберт
источник
74
Как это сделать без графического интерфейса?
Филипп
13
@ Филиппе, каков ваш вариант использования? Docker для Windows или Docker для Mac поставляется с guli. Я думаю, что в вашем случае есть собственный докер над Linux (без какой-либо виртуальной машины, как в производственных системах / облаке). В таких случаях вам не нужно настраивать память виртуальной машины, потому что в докере есть дырочная машина для ее использования.
Роберт
10
Да, я понял это позже. Итак, если я хочу, чтобы в моем контейнере докеров было> 4 ГБ ОЗУ, мне не нужно ничего делать, если я разрабатываю на Linux?
Филипп
3
Это невозможно, в основном потому, что вы не назначаете память контейнерам докеров, вместо этого вы ограничиваете объем памяти, который может использовать контейнер. Обратите внимание, что настоящий ответ не о назначении памяти контейнерам, а о назначении памяти виртуальной машине, на которой работает докер.
Роберт
2
@SiddharthPant, докер, работающий непосредственно в Linux, будет использовать столько памяти, сколько доступно, поэтому нет никаких ограничений, кроме физического.
Роберт
21

Выделите максимальную память для вашей док-машины из (предпочтения докера -> заранее)

Снимок экрана дополнительных настроек: Скриншот дополнительных настроек.

Это установит максимальный лимит потребления докером при запуске контейнеров. Теперь запустите свой образ в новом контейнере с флагом -m = 4g для 4 гигабайт оперативной памяти или более. например

docker run -m=4g {imageID}

Не забудьте применить изменения увеличения предела подъема. Перезапустите докер и дважды проверьте, увеличился ли предел оперативной памяти. Это может быть одним из факторов, по которым вы не видите увеличения предела оперативной памяти в контейнерах докеров.

Рыночная очередь
источник
17

Если вы хотите изменить контейнер по умолчанию и используете Virtualbox, вы можете сделать это через командную строку / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
уничтожить все
источник