I like open source software, and I was curious whether Podman could fully replace my Docker workflow. Settling into the new setup went smoothly: Podman and Podman Desktop replaced it one-for-one, keeping my usual docker ps and docker compose commands, with everything installed through Homebrew.
Before switching, I counted 11 running application containers, three stopped ones, and a separate Portainer extension container. MySQL, PostgreSQL, Redis, local websites, a reverse proxy. Across 21 volumes, there was about 23 GB of data to preserve.
Uninstalling the app was going to be the last step.
Keeping my existing workflow
I installed Podman, the standalone Docker CLI, Compose, Buildx, and credential helpers through Homebrew. Podman runs a Linux VM on macOS; mine ended up with six CPUs and 8 GB of memory. Later in the session, I asked for Podman Desktop too. I still wanted a GUI for looking at containers and logs.
The CLI compatibility comes from pointing Docker at Podman’s Docker-compatible socket. Once the Podman machine is running:
PODMAN_SOCKET=$(podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}')
docker context create podman --docker "host=unix://${PODMAN_SOCKET}"
docker context use podman
The data took more work. I saved the existing images and container filesystem changes, stopped the databases cleanly, and backed up their volumes. Then I restored everything into Podman, preserving ports, mounts, network aliases, and restart policies. Keeping the existing image versions also avoided accidentally turning this into a database upgrade.
The result was the same 11 applications running, with the other three still stopped. Podman Desktop showed the same Compose projects. One detail from testing: my Buildx setup needed docker build --load to make built images available locally. Compose builds handled that automatically.
Using an agent for the migration
I used Codex, but the same approach applies to any coding agent with terminal access: give it the outcome, ask it to inspect the machine, and have it verify the result.
Getting started only took a few sentences. Here’s a simplified version of my request, including Podman Desktop, which I added afterward:
Migrate my Mac from Docker Desktop to Podman and Podman Desktop,
installing everything through Homebrew. Keep Docker CLI and Compose
working, and configure my zshrc to use Podman's Docker context. First,
count my containers and explain what will be affected. Preserve my
containers and data, verify they work, then remove Docker Desktop.
I started with an inventory of containers, volumes, and existing web responses. That caught a reverse-proxy route already returning HTTP 502. Having a baseline saved me from treating an old problem as a new one.
There were retries and actual downtime. When a MySQL backup stream failed, the recovery script restarted the original services. The agent switched to writing the backup directly to disk and checked that it completed before continuing.
I found the follow-through most useful: comparing database lists, checking endpoints, testing a Compose build, and restarting the VM to confirm the right containers came back. I now have Podman Desktop and my familiar Docker commands. I’m keeping the backups and original Docker VM data while I use the new setup for real work.
Related Posts
- 7 min readHosting my hobby projects from cheap HP mini desktop from my closet (Verizon Fios)
- 5 min readSandboxing AI Coding Agents: Network Firewall + Restricted Shell Environment
- 3 min readI Stopped Caring About Hot Reload
- 4 min readI Became Obsessed With Dependency-Free, Vanilla Apps
- 6 min readMy Coolify Experience After a Year
- 2 min readMake Vercel open source and self-hosted, you get Coolify
Share