Як призначити більше пам'яті контейнеру docker


117

Коли заголовок читається, я намагаюся призначити більше контейнера для мого контейнера. Я використовую зображення з докер-хабу під назвою "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 ГБ?

Відповіді:


203

Цей 2GBобмеження, яке ви бачите, є загальною пам'яттю VM, в якій працює докер.

Якщо ви використовуєте docker-for-windows або docker-for-mac, ви можете легко збільшити його за допомогою піктограми Whale 🐳 на панелі завдань, а потім перейдіть до Налаштування -> Advanced:

Налаштування Докера

Але якщо ви використовуєте 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


72
Як це зробити без гуї?
Філіпп

13
@Philippe, який у вас варіант використання? Docker для Windows або docker для Mac поставляється з guli. Я думаю, що ваш випадок має нативний докер через Linux (без будь-якої віртуальної машини, що стосується виробничих систем / хмари). У таких випадках вам не потрібно налаштовувати пам'ять VM, оскільки докер має дірову машину для його використання.
Роберт

10
Так, я зрозумів це пізніше. Тож якщо я хочу, щоб мій контейнер докер мав> 4 Гб оперативної пам’яті, мені не потрібно нічого робити, якщо я розробляю Linux?
Філіп

3
Це неможливо, головним чином, оскільки ви не присвоюєте пам'ять контейнерам docker, натомість обмежуєте кількість пам'яті, яку може використовувати контейнер. Зауважте, що ця відповідь не стосується присвоєння пам'яті контейнерам, а присвоєння пам'яті віртуальній машині, на якій працює докер.
Роберт

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.