Посібники/Docker використовує забагато памʼяті
Docker використовує забагато памʼяті на Mac? Як знайти контейнер і обмежити його
Коротка відповідь
На Mac Docker запускає всі контейнери в одній віртуальній машині Linux, тож Монітор активності показує один великий процес, зазвичай Virtual Machine Service for Docker, а не контейнери. Щоб побачити, який контейнер використовує памʼять, виконайте docker stats. Щоб обмежити загальний обсяг, зменште Memory limit у Docker Desktop: Settings → Resources → Advanced; за замовчуванням це половина памʼяті Mac. Resource Saver у тому ж розділі вимикає віртуальну машину, коли Docker Desktop неактивний. Vitals, системний монітор для Mac, показує памʼять, процесор, мережу й порти кожного контейнера у вкладці «Контейнери» і зупиняє контейнер просто зі смуги меню.
Як знайти та обмежити памʼять Docker
- 01 Відкрийте Монітор активності, клацніть «Памʼять» і введіть Docker у полі пошуку. Найбільший рядок — це віртуальна машина, у якій працюють ваші контейнери; з фреймворком Virtualization від Apple вона називається Virtual Machine Service for Docker. com.docker.backend — це сам Docker Desktop.
- 02 У Терміналі виконайте
docker stats --no-stream. Кожен рядок — запущений контейнер, а MEM USAGE / LIMIT показує, скільки він використовує і скільки може використати щонайбільше. - 03 Зупиніть те, чим не користуєтеся:
docker stopі назва контейнера абоdocker compose downу папці проєкту Compose. - 04 Відкрийте в Docker Desktop Settings → Resources → Advanced і зменште Memory limit до значення, трохи більшого, ніж показує
docker statsу час найбільшого навантаження. Застосуйте зміну; Docker Desktop перезапустить віртуальну машину. - 05 Увімкніть Resource Saver у тому ж розділі, щоб віртуальна машина вимикалася, коли не запущено жодного контейнера.
OrbStack, Colima, Rancher Desktop і Podman теж запускають контейнери у віртуальній машині, кожен зі своїм параметром памʼяті. Для Colima colima start --memory 4 виділяє віртуальній машині 4 ГБ.
Контейнери — це функція Linux, тож на Mac кожен рушій запускає їх у невеликій віртуальній машині Linux. macOS бачить цю машину як один процес і не знає, який контейнер усередині скільки використовує. Тому Монітор активності показує один процес на кілька гігабайтів і жодного контейнера, і тому відповіді — у власних інструментах Docker. Таблиця нижче пояснює, що означає те, що ви бачите, і що робити.
Куди йде памʼять Docker
| Що ви бачите | Що це | Що робити |
|---|---|---|
| Virtual Machine Service for Docker, кілька ГБ | Віртуальна машина Linux, у якій працюють усі контейнери | Зменште Memory limit у Settings → Resources → Advanced |
| com.docker.backend | Власний процес Docker Desktop | Зазвичай невеликий; перезапустіть Docker Desktop, якщо він постійно росте |
| Памʼять лишається високою, хоча не запущено жодного контейнера | Віртуальна машина досі тримає памʼять, яку використовувала | Увімкніть Resource Saver або завершіть Docker Desktop |
| Один контейнер близько до свого ліміту | Йому потрібно більше, або в ньому витік | docker stats і ліміт для окремого контейнера |
| Памʼять зростає під час збирання образів | Збирання відбувається в тій самій віртуальній машині | Це нормально; памʼять звільняється, коли збирання закінчується |
Чому Монітор активності показує один великий процес Docker
Віртуальна машина отримує памʼять від macOS, як будь-яка програма, до заданого вами Memory limit. Усередині неї Linux розподіляє цю памʼять між вашими контейнерами, а решту використовує для кешування файлів, як і macOS. Ззовні все це виглядає однаково: один процес, що тримає багато памʼяті.
Розподіл знає лише рушій, і саме про нього питає docker stats. Стовпець CPU % там — це частка процесорів віртуальної машини, а MEM % — частка ліміту контейнера або всієї віртуальної машини, якщо в контейнера ліміту немає.
Скільки памʼяті виділити Docker
За замовчуванням Docker Desktop бере половину памʼяті Mac: 8 ГБ на Mac із 16 ГБ. Типовому стеку розробки — сервер програми, база даних і кеш — зазвичай потрібно набагато менше. Запустіть свій стек як завжди, стежте за загальним значенням у docker stats у час найбільшого навантаження й задайте Memory limit трохи більшим.
Якщо задати замалий ліміт, Linux у віртуальній машині зупинятиме контейнери, яким забракло памʼяті. Виконайте docker inspect --format '{{.State.OOMKilled}}' з назвою контейнера: команда виведе true, якщо це сталося. Збільште ліміт або задайте цьому контейнеру власний ліміт, щоб він не тягнув за собою інші.
Задайте ліміт памʼяті для кожного контейнера
Ліміт для одного контейнера не дає сервісу з витоком заповнити віртуальну машину. З docker run додайте --memory 512m. У файлі Compose задайте mem_limit: 512m для сервісу. Контейнер буде зупинено, якщо він перевищить ліміт, а docker stats показує ліміт поруч із використанням.
Чому Docker не повертає памʼять
Зупинка контейнерів звільняє памʼять усередині віртуальної машини, але машина не завжди одразу віддає її macOS, тож її значення в Моніторі активності може лишатися високим. Resource Saver повертає всю памʼять, вимикаючи машину, коли Docker Desktop неактивний, а коли контейнер знадобиться, машина знову запускається за кілька секунд. Завершення Docker Desktop дає те саме.
Docker і місце на диску
Образи, зупинені контейнери, томи й кеш збирання зберігаються в одному образі диска, який росте під час роботи, і на Mac він враховується в системних даних. docker system df показує, скільки займає кожен тип. docker system prune видаляє зупинені контейнери, невикористовувані мережі, висячі образи й кеш збирання; додавайте --volumes, лише якщо ви впевнені, що жоден том не містить потрібних даних. Disk usage limit поруч із Memory limit у параметрах Docker Desktop обмежує його розмір.
Що додає Vitals
Vitals показує те, чого віртуальна машина не повідомляє macOS: памʼять кожного контейнера.
- Вкладка «Контейнери» з памʼяттю, процесором, мережею, диском і опублікованими портами кожного контейнера, а проєкти Compose згруповано разом
- Картки для найбільшого контейнера й того, що найближче до свого ліміту, і графік памʼяті за контейнерами
- Docker Desktop — один рядок у списку програм разом з віртуальною машиною; клацніть його, щоб побачити контейнери всередині
- Контейнери є й у спадній панелі, де одне клацання зупиняє контейнер після підтвердження. Див. як зупинити контейнери Docker
- Docker Desktop, OrbStack, Colima, Rancher Desktop і Podman
Варто знати
- Vitals зчитує дані контейнерів з рушія і ніколи не запускає й не видаляє контейнери. Єдина зміна, яку вносить Vitals, — зупинка, і лише коли ви про це просите.
- Вкладка зʼявляється, коли працює рушій.
Що питають люди
Чому Docker використовує так багато памʼяті на Mac?
Docker запускає контейнери у віртуальній машині Linux, яка займає памʼять до свого Memory limit — за замовчуванням це половина памʼяті Mac. Зменште Memory limit у Settings → Resources → Advanced і виконайте docker stats, щоб побачити, який контейнер використовує найбільше.
Що таке Virtual Machine Service for Docker?
Віртуальна машина, у якій Docker Desktop запускає ваші контейнери, коли використовує фреймворк Virtualization від Apple. Її памʼять — це все, що використовують контейнери й Linux усередині неї, до Memory limit у Docker Desktop.
Як обмежити памʼять Docker на Mac?
У Docker Desktop відкрийте Settings → Resources → Advanced і зменште Memory limit. Для одного контейнера використайте docker run --memory 512m або mem_limit: 512m у файлі Compose.
Чому Docker не повертає памʼять після зупинки контейнерів?
Віртуальна машина тримає частину використаної памʼяті навіть після зупинки контейнерів. Увімкніть Resource Saver, який вимикає машину, коли Docker Desktop неактивний, або завершіть Docker Desktop.
Чому Virtual Machine Service for Docker так сильно навантажує процесор?
Зазвичай якийсь контейнер зайнятий, і docker stats показує, який саме. Якщо навантаження процесора лишається високим, хоча не запущено жодного контейнера, завершіть і знову відкрийте Docker Desktop та оновіть його: високе навантаження процесора без запущених контейнерів зустрічалося як помилка в деяких версіях Docker Desktop.
Скільки памʼяті виділити Docker на Mac?
Трохи більше, ніж ваші контейнери використовують у час найбільшого навантаження, — це показує docker stats. Для типового стеку розробки це часто 2–4 ГБ, набагато менше за стандартну половину памʼяті Mac.
Чи є програма, яка показує памʼять контейнерів Docker на Mac?
У Vitals є вкладка «Контейнери» з памʼяттю, процесором, мережею, диском і портами кожного контейнера для Docker Desktop, OrbStack, Colima, Rancher Desktop і Podman. Vitals також зупиняє контейнер зі смуги меню, спершу запитавши.
У глосарії
Інші посібники
- Чому мій Mac такий повільний
- Що розряджає акумулятор Mac
- Яка програма використовує процесор чи памʼять
- Чому Mac не засинає
- Chrome використовує забагато памʼяті
- Чому вентилятори Mac такі гучні
- Як керувати швидкістю вентиляторів на Mac
- Як звільнити оперативну памʼять на Mac
- Як зупинити контейнери Docker
- Мікшер гучності для Mac
- Cursor сильно навантажує процесор
- Claude Code використовує забагато памʼяті
- Ліміти використання Claude Code і Codex
- Програма Claude навантажує процесор
- Codex навантажує процесор
- Ollama використовує забагато памʼяті
- Альтернативи Монітору активності
- iStat Menus: альтернативи
- Stats: альтернативи
- Диспетчер завдань для Mac
- Найкращі системні монітори для Mac
- Найкращі монітори для смуги меню Mac
- Найкращі мікшери гучності для Mac
- htop для Mac
- Process Explorer для Mac
- Найкращі монітори температури для Mac