Every Docker container, with its own memory, CPU and ports.

On a Mac, Docker is one big process and that is all Activity Monitor can tell you. Vitals asks the engine what is inside and gives you a Containers tab: every container's memory, CPU, network and ports, in the window and the dropdown, with Stop on each.

Memory by Type
82%
in use
App 22.15 GB
Wired 5.67 GB
Compressed 24.54 GB
Cached 10.32 GB
Free 1.32 GB
Memory by App
59.25 GB
all apps
Google Chrome 21.23 GB
VS Code 8.17 GB
Terminal 3.86 GB
Safari 2.69 GB
Other 23.30 GB
Power by App
1.7 W
all apps
GitHub Desktop 427 mW
Google Chrome 367 mW
Zoom 145 mW
Terminal 86 mW
Other 650 mW
Now
27 %
Average today36%
Load3.41
User
19%
Your apps
System
8%
macOS
Cores
12
8 P4 E
Top App
Google Chrome
18.2%
AppCPU
Google Chrome
96 processes
–
Terminal
49 processes
–
Safari
16 processes
–
Docker
9 processes
–
Visual Studio Code
63 processes
–
Slack
13 processes
–
Figma
14 processes
–
Zoom
8 processes
–
In use of 64 GB
52.63 GB
Normal
Free11.37 GB
Swap0 MB
App
23.43 GB
Wired
5.37 GB
Compressed
23.82 GB
Top App
Google Chrome
20.59 GB
AppMemory
Google Chrome
96 processes
–
Visual Studio Code
63 processes
–
Terminal
49 processes
–
Safari
16 processes
–
Docker
9 processes
–
Slack
13 processes
–
Figma
14 processes
–
Zoom
8 processes
–
Free of 994.66 GB
479.72 GB
Used514.94 GB
Written today38.9 GB
Reading
737 kB/s
Writing
195 kB/s
Volumes
2
Macintosh HDBackup
Top App
Photos
121 kB/s
AppWriting
Photos
6 processes
–
Google Chrome
96 processes
–
Docker
9 processes
–
Visual Studio Code
63 processes
–
Xcode
22 processes
–
Mail
4 processes
–
Slack
13 processes
–
Music
5 processes
–
Downloading
12 kB/s
Today4.4 GB
Last 30 days212 GB
Uploading
419 kB/s
Last 7 Days
48.3 GB
Interface
Wi-Fi
en0
Top App
Safari
8 kB/s
AppDownloading
Safari
16 processes
–
Google Chrome
96 processes
–
Slack
13 processes
–
Zoom
8 processes
–
Music
5 processes
–
Mail
4 processes
–
Docker
9 processes
–
Notion
6 processes
–
Apple M2 Max
60 %
Average32%
Peak95%
Memory
1.69 GB
Average
32%
Peak
95%
Top App
Figma
35%
AppGPU
Figma
14 processes
–
Google Chrome
96 processes
–
Safari
16 processes
–
Zoom
8 processes
–
Visual Studio Code
63 processes
–
Xcode
22 processes
–
Slack
13 processes
–
Notion
6 processes
–
16-core Neural Engine
2 %
Average3%
Peak16%
Memory Traffic
79.9 MB/s
Average
3%
Peak
16%
Top App
Photos
3 connections
AppNeural Engine
Photos
6 processes
–
Xcode
22 processes
–
Safari
16 processes
–
Zoom
8 processes
–
Mail
4 processes
–
Notion
6 processes
–
Google Chrome
96 processes
–
On battery
64 %
Remaining2h 46m
Cycles412
Power Draw
12.6 W
Health
76%
Temperature
31°
Top App
Google Chrome
4.3 W
AppPower
Google Chrome
96 processes
–
Zoom
8 processes
–
Figma
14 processes
–
Slack
13 processes
–
Safari
16 processes
–
Visual Studio Code
63 processes
–
Docker
9 processes
–
Music
5 processes
–
Output
MacBook Pro Speakers
64%
AppStatusVolumeLevel
Music Playing 100%
Zoom Playing 80%
Google Chrome Playing 35%
Slack Silent Muted
Safari Silent 100%
Figma Silent 100%
Notion Silent 100%
Mail Silent 100%
3 connected
Lowest battery: AirPods Pro, left, 42%. Beats Fit Pro is paired but away.
42% Bluetooth Settings
DeviceKindBatteryLevel
AirPods Pro Headphones
Left 42%
Right 58%
Case 80%
Magic Trackpad Trackpad 67%
Magic Keyboard Keyboard 91%
4 dev servers are running but idle
Stopping them frees 1.37 GB and ports 3000, 4321, 4322, 8000.
Stop All…
storefront
9 processes
working
1.18 GB
storefront-web
node
4322 up 3 days, barely used
458 MB
scraper-api
python
8000 up 4 days, barely used
412 MB
marketing-site
node
4321 idle 2 hours
296 MB
billing-api
node
30009229 idle 45 min
204 MB
docs
node
5173
188 MB
ml-notebooks
python
8888
164 MB
design-tokens
node
6006 idle 20 min
121 MB
infra
3 processes
96 MB
auth-service
go
8080
74 MB
email-templates
node
3030 idle 3 hours
58 MB
0%
Claude
This week
On pace · 10% to spare
0%
Codex
5-hour session
Resets in 3h 12m
0%
GitHub Copilot
Premium requests
Runs out in 4d at this rate
0%
Cursor
This billing cycle
Resets in 12d 5h
Checkout flow tests Working Waiting for you
Claude Code · storefront · running 48 min
410 MB
Started · 4 Quit Session…
vitest command · 61% CPU 520 MB
node server · port 3,001 240 MB
Google Chrome for Testing browser 310 MB
mcp-server-fetch tool server 64 MB
Codex idle 48 min
docs · in Terminal · Nothing started
290 MB
4 containers in Docker
674MB
Lowest592.3 MB
Peak674 MB
By Container
postgres312 MB46%
rabbitmq206 MB31%
minio142 MB21%
redis14 MB2%
CPU
3.0%
most in postgres
Closest to Its Limit
rabbitmq
86% of 240 MB
Network
9kB/s
↓ 6 kB/s · ↑ 3 kB/s
Published Ports
6
5433567263799000+2
storefront 2 containers
Started together by Docker Compose · 2 ports · 2 running
1.9% 326 MB
postgres postgres:16
Up 5 hours
5433
1.6% 312 MB
redis redis:7-alpine
Up 5 hours
6379
0.3% 14 MB
api 1 container
Started together by Docker Compose · 2 ports · 1 running
0.9% 206 MB
rabbitmq rabbitmq:3-management
Up 3 hours
567215672 86% of 240 MB
0.9% 206 MB
minio minio/minio
Up 26 hours
90009001
0.2% 142 MB

The numbers are simulated: a web page cannot read your Mac, and should not.

01Containers

Inside the one big process, container by container.

Vitals asks the engine what is running inside its virtual machine and lists each container on its own: memory against its limit, CPU, what it is sending and receiving, and the ports it publishes, so you can see which one grew and which one is busy.

  • Memory against its limit
  • CPU, and what it sends and receives
  • The ports it publishes
  • Its image, and its Compose project and service
shopcompose · ~/Projects/shop3 containers · 2.0 GB
postgrespostgres:164%↓1.2 ↑0.4 MB/s:5432
1.4 GB of 2 GB
redisredis:71%↓0.1 ↑0.1:6379
96 MB of 512 MB
apishop-api38%↓3.8 ↑12:8080
512 MB of 1 GB
Memory against its limit Inside the engine's machine
02Engines

Whichever engine you run, it just works.

Docker Desktop, OrbStack, Colima, Lighter, Rancher Desktop and Podman are all recognised, and Vitals follows whichever engine your docker command is set to use. The tab appears while an engine runs and goes away when it stops.

  • Docker Desktop, OrbStack, Colima, Lighter, Rancher Desktop, Podman
  • Follows whichever engine your docker command uses
  • Appears while an engine is running
  • Read-only, except Stop
Docker Desktopnot running
OrbStackrunning
Colimanot running
Lighternot running
Rancher Desktopnot running
Podmannot running
docker context showorbstack
Whichever engine docker uses The tab appears while one runs
03Stop

Stop a container the way docker stop would.

Stop any container from the tab or the dropdown. Vitals asks first, gives it ten seconds to shut down cleanly before it is killed, and never starts, restarts or removes anything, so there is nothing to undo.

  • In the tab and in the dropdown
  • Asks first, every time
  • Ten seconds to shut down, then killed
  • Never starts, restarts or removes
OverviewMemoryProjectsAgentsContainers
postgres1.4 GB:5432Stop
redis96 MB:6379Stop
api512 MB:8080Stop
Stop postgres?
Ten seconds to shut down, then it is killed. Not removed.
CancelStop
As docker stop would Never starts, restarts or removes
04Projects

A project's whole footprint in one row.

Containers started by docker compose from a project folder sit under that project on the Projects tab, next to its dev server and its tests, measured inside the engine's machine rather than counted twice. Quit the project and its containers stop with it.

  • Compose containers under their project
  • Beside the project's dev server and tests
  • Measured inside the engine's machine, not on top of it
  • Quit the project and stop its containers, together
shop2.4 GB · 41% CPUQuit
next dev:3000412 MB
vitest2 workers380 MB
postgres:5432container1.4 GB
redis:6379container96 MB
api:8080container512 MB
docsastro dev :4321210 MB
Compose containers under their project One Quit for the lot
Why it matters

Docker containers, before and after

On a Mac, Docker is one process. Every engine runs containers inside one Linux virtual machine, and macOS sees the machine, not what is inside it. Activity Monitor shows the engine at eight gigabytes and nothing more. Which container grew, which one is busy, which one holds the port: the engine knows and macOS does not.

So a Mac with a few projects' worth of containers runs short of memory, and the cause is a single row you cannot open.

Vitals asks the engine and shows a Containers tab: every container's memory against its limit, its CPU, what it sends and receives, and its ports, in the window and the dropdown, grouped by Compose project with the service name and the folder it ran from. Stop a container as docker stop would, after a confirmation; Vitals never starts, restarts or removes anything. Docker Desktop, OrbStack, Colima, Lighter, Rancher Desktop and Podman, and whichever engine your docker command is set to use.

How to use it

Where it is in Vitals

The tab, the menu bar item and the setting, in the order you would reach for them.

  1. 01

    Open the Containers tab

    It appears while an engine is running, in the window and in the menu bar dropdown, and the dropdown's Overview gets a Containers tile. Containers started by docker compose are grouped by their project.

  2. 02

    Read a container

    Memory against its limit, CPU, what it is sending and receiving, the ports it publishes, its image, and the Compose service and folder it came from. Everything is measured inside the engine's virtual machine, so it is part of the engine's memory, not on top of it.

  3. 03

    Stop one

    Click Stop on the container, in the tab or in the dropdown. Vitals asks first, then stops it the way docker stop does, giving it ten seconds before it is killed.

  4. 04

    Follow the project

    On the Projects tab, the containers a project started sit under it with its dev server and the rest, so a project's whole footprint is one row.

Compared

Docker containers: Activity Monitor and Vitals

The whole comparison is row by row. These are the rows about Docker containers.

Activity Monitor Vitals
Containers
Activity MonitorOne process for the whole engine
VitalsEach container on its own
Memory
Activity MonitorThe machine's total
VitalsPer container, against its limit
Ports
Activity MonitorNot shown
VitalsPublished ports per container
Stopping
Activity Monitordocker stop in Terminal
VitalsStop, after a confirmation
Engines
Activity MonitorOne row, whichever it is
VitalsDocker Desktop, OrbStack, Colima, Lighter, Rancher Desktop, Podman

The words behind it

What the numbers mean, from the Activity Monitor glossary.

Questions

The ones people ask about Docker containers before they buy.

Which Docker engines does Vitals support?

Docker Desktop, OrbStack, Colima, Lighter, Rancher Desktop and Podman. Vitals also follows whichever engine your docker command is set to use, so an engine it has never heard of works as long as it registered a Docker context.

Why does Activity Monitor show Docker as one process?

Because on a Mac every engine runs containers inside one Linux virtual machine, and macOS sees only the machine. Only the engine knows which container inside it uses what, so Vitals asks the engine.

Can Vitals start or remove containers?

No. It is read-only, except for Stop, which it does only when you ask and after a confirmation.

When does the Containers tab appear?

While an engine is running. With no engine, there is no tab.

Are the containers in the menu bar dropdown too?

Yes. The dropdown has a Containers tab, with Stop on each container, and a Containers tile on its Overview.

Why does Docker use so much memory with nothing running?

The virtual machine keeps the memory it was given whether containers run or not. Vitals shows what is inside it; capping the machine is in Docker's own settings, and the Docker memory guide walks through it.

Does Vitals show the Compose project?

Yes. Containers started by docker compose carry their project and service name and the folder they ran from, and show under that project on the Projects tab.

Does it need the docker command installed?

No. Vitals talks to the engine directly. If the docker command is there, Vitals reads which engine it is set to use, so an engine Vitals has never heard of still works.

Read on

Guides that use this, and how Vitals compares with the apps people buy for it.

More of Vitals

All features

Get Vitals for $15 while the launch price lasts

50 left at this price. The regular price is $39. One payment, lifetime updates, 14-day refund.

Get Vitals for $15