使用 Podman 本地部署 Supabase

最后更新:

supabase start 会通过 Docker Compose 拉起本地 Postgres、Auth、Studio 等容器。官方文档通常写「需要 Docker Desktop」,但若你像笔者一样在 WSL2 里使用 Podman 而非 Docker,直接执行命令往往会失败。本文记录实际报错与解决步骤。

报错现象

在练习项目目录(例如 supabase-learn)中执行:

pnpx supabase start

终端可能出现:

failed to inspect service: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Docker Desktop is a prerequisite for local development. Follow the official docs to install: https://docs.docker.com/desktop

这说明 Supabase CLI 在访问 Docker API 时,默认去找 unix:///var/run/docker.sock,而你的环境里并没有运行 Docker Desktop,也没有该套接字。

原因简述

组件 说明
Supabase CLI 本地开发用 docker compose(或兼容实现)编排容器
默认套接字 /var/run/docker.sock(Docker Desktop / dockerd)
Podman 提供兼容的 REST API,但套接字路径与启动方式不同

Podman 4.x 在 Linux/WSL 上通常以 rootless 方式运行,API 监听在:

/run/user/<UID>/podman/podman.sock

若未启用 podman.socket,或未设置 DOCKER_HOST,CLI 就会报上述错误。

Supabase 对 Podman 的支持在社区 issue 中已有讨论(supabase/cli#265),多数情况下可替代 Docker,但需注意 rootless 权限、Edge Functions 等边界情况。

环境说明

撰写本文时的环境供参考:

解决步骤

1. 启用 Podman API 套接字

systemctl --user enable --now podman.socket
systemctl --user status podman.socket

应看到 Active: active (listening),并监听 /run/user/$(id -u)/podman/podman.sock

2. 安装 Docker 兼容命令与 Compose

sudo apt update
sudo apt install -y podman-docker podman-compose containernetworking-plugins
软件包 作用
podman-docker 提供 /usr/bin/docker,实际调用 Podman
podman-compose docker compose / docker-compose 编排容器
containernetworking-plugins 降低 Podman 创建网络失败的概率

3. 配置 DOCKER_HOST

~/.bashrc~/.zshrc 中加入:

export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock

重新加载配置:

source ~/.bashrc

验证:

docker ps
docker compose version

两条命令均不应再出现「Cannot connect to the Docker daemon」。

4. 再次启动 Supabase

cd ~/workspace/supabase-learn   # 换成你的项目路径
pnpx supabase start

首次拉镜像可能较慢。成功后会输出本地 API URL、Studio 地址、anon key 等。

若需排查,可加 --debug

pnpx supabase start --debug

可选:固定 docker.sock 路径

部分工具写死 /var/run/docker.sock。在确认 podman.socket 已启动的前提下,可创建符号链接(需 root):

sudo mkdir -p /var/run
sudo ln -sf /run/user/$(id -u)/podman/podman.sock /var/run/docker.sock

更推荐长期使用 DOCKER_HOST,避免与系统其它服务冲突。

已知限制

  1. Rootless Podman:可能出现卷权限、database is not healthy 等问题;可查阅 supabase/cli#3099,必要时尝试 root 级 podman.socketsupabase start --ignore-health-check(仅作权宜之计)。
  2. Edge Functions:本地调试在 Podman 上偶发异常(参见 supabase/cli#4190)。
  3. Podman Desktop(Windows):若容器实际跑在 Windows 侧的 Machine 上,WSL 内的 DOCKER_HOST 需指向对应连接方式,与「WSL 内原生安装 Podman」略有不同。

与「必须装 Docker Desktop」的关系

官方文案里的 Docker Desktop,实质要求是:存在可访问的 Docker API 运行时。在 WSL + Podman 场景下,通过 podman.socket + podman-docker + DOCKER_HOST 即可满足,不必再安装 Docker Desktop。

参考资料