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 等边界情况。
环境说明
撰写本文时的环境供参考:
- Windows 11 + WSL2(Ubuntu)
- Podman 4.9.x(非 Docker Desktop)
- Supabase CLI 通过项目内
pnpm/pnpx调用 - Node 由 fnm 管理,并启用了
fnm --enable-corepack(与容器运行时无关,仅说明开发栈)
解决步骤
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,避免与系统其它服务冲突。
已知限制
- Rootless Podman:可能出现卷权限、
database is not healthy等问题;可查阅 supabase/cli#3099,必要时尝试 root 级podman.socket或supabase start --ignore-health-check(仅作权宜之计)。 - Edge Functions:本地调试在 Podman 上偶发异常(参见 supabase/cli#4190)。
- 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。