我用了 Portainer 大概三年,最近两个月把它换掉了。
不是 Portainer 突然变难用,是它一路加东西加到我已经认不出来——RBAC 要付费版、OIDC 也要付费版、审计日志还是付费版。我那台 NAS 跑 30 来个容器,用 CE 版凑合了挺久,直到上个月想给面板加个 OIDC 登录才发现:这条路被锁起来了。
我换成了 Arcane,一个才上线一年多的 Docker 管理面板,6.7k stars,BSD-3-Clause 协议(不是 BSL 也不是 Source-Available),全功能免费,包括 OIDC。最关键的是,内存占用只有 Portainer CE 的一半。

(图:Arcane 主界面,左侧栏是容器/项目/环境/镜像/卷/网络,左下角是用户;右侧是环境卡片和 CPU/内存/磁盘实时监控。这是从仓库 .github/assets/dashboard-1.19.3.png 取的官方截图。)
为什么是 Arcane
Docker 面板这两年冒出来不少。Dockge 干净但功能简陋,Komodo 重到我装在 NAS 上心理负担大,Arcane 那个刚刚好的尺寸戳到了我:
- 单 Go 二进制 + SvelteKit 前端,单容器部署,没有 MongoDB 依赖
- BSD-3-Clause 真开源,不是那种三年后转商业的协议
- 支持 Docker Compose(带 YAML 语法检查的浏览器内编辑器)、Docker Swarm、远程主机(arcane-headless agent)
- GitOps 内置:指定一个 Git 仓库,push 就自动重部署
- Webhooks:CI 跑完镜像构建,POST 一个请求就能触发更新
- REST API + CLI 双通道,脚本化的姿势和 Web UI 一样
- v2.5.0(2026-07-20)还加了基于 Docker 事件的镜像轮询,省了定时器
一年前这个项目我都没听说过,现在主分支 3,279 个 commits、90 个 release、v2.5.0 才发一周。节奏是真的可以。

(图:getarcane.app 主页,标题「Modern Docker management, designed for everyone」,右上角是 v2.5.0 / 6.7k stars。)
几个戳到我的点
OIDC 不用付费。之前 Portainer CE 没 OIDC,要登录我得自己反代一层 Basic Auth,难看也难管。Arcane 在 Settings / Authentication 里直接配 Keycloak/Authentik 的 issuer、client ID、secret,五分钟搞定,而且支持把 OIDC 的 group claim 映射到 Arcane 内部角色(不然用 OIDC 登进来啥也看不见)。
Webhooks 干掉手动部署。这个是另一个我用了就回不去的功能。我本地的镜像构建流程是 GitHub Actions 推镜像到某私有 registry,原来都得 SSH 上去 docker compose pull && docker compose up -d,现在 webhook 一挂,build 完自动拉新镜像自动重启,选项有 update / start / stop / redeploy / restart 五种。我只在 webhook 失败告警时才需要看日志。
项目(Project)= 一个 Compose。我所有自托管服务都从裸 Compose 文件转成了 Arcane 的 Project,YAML 浏览器内带 lint 校验,写错缩进当场红线,比之前在 vim 里摸黑好太多。文件还是在磁盘上 /app/data,换面板随时能搬走,不会被锁在面板里。
远程主机。我除了 NAS,还有几台远端的小服务器。Arcane 在远端跑一个 arcane-headless agent,主面板里直接列出来切换环境,不用每台机器开一个端口。这个和 Portainer Edge Agent 思路一样,但 Arcane 的配置简单——只要一个 join token。
内存占用:少一半是少一半
有篇 2026-06-29 的迁移实测贴(erhanbasturk.com.tr)直接给了个对比——同一台机器,闲置状态下:
- Portainer CE:约 150 MB
- Arcane:约 67 MB

我自己的 NAS 上是 100MB vs 60MB 左右,差异没他那么夸张,但 Arcane 确实轻。考虑到面板这种东西 7×24 小时挂着,省下来的内存能多跑一个本地模型推理容器。
30 秒部署
Arcane 的官方 compose 就这么几行:
services:
arcane:
image: ghcr.io/getarcaneapp/arcane:latest
container_name: arcane
ports:
- '3552:3552'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- arcane-data:/app/data
environment:
- ENCRYPTION_KEY=你的32位密钥
- JWT_SECRET=你的32位密钥
restart: unless-stopped
volumes:
arcane-data:
生成密钥用 openssl rand -hex 32 跑两次,填进 ENCRYPTION_KEY 和 JWT_SECRET,docker compose up -d,打开 http://NAS-IP:3552。默认账号 arcane / arcane-admin,进去第一件事就是改密码。
坑就一个:挂载目录的路径要一致。如果你原本把 compose 放在 /opt/stacks/xxx,那在 Arcane 里 mount 也要是 /opt/stacks:/app/data/projects(容器内路径用 PROJECTS_DIRECTORY 显式设),不然相对路径解析会爆掉。
GitHub 上的 Arcane 仓库

(图:getarcaneapp/arcane 仓库主页,6.7k stars、262 forks、3,279 commits、90 releases,最新一次 push 是截图前 10 小时。Topics:docker, self-hosted, sveltekit, typescript, go, container-management, docker-compose。)
看着这个 commit 密度和发布频率,我愿意赌这个项目明年还在——这其实是我选自托管面板最看重的事。Portainer 当年也是这么起来的,只是后来商业化太重,Arcane 至少现在还是个人作者(kmendell)主导 + 社区贡献,节奏跑得起来。
踩过的两个小坑
1. OIDC 登进来啥都看不见。我第一次配 OIDC 的时候,登是登上了,但所有容器、镜像、卷都是空的。翻文档才知道要配 Role Mappings——Arcane 默认新用户没有任何内部角色,OIDC token 里的 group claim 要映射到 admin 才有权限。配置方法在 Settings / Authentication / OIDC 里,把 OIDC 的某个 claim(比如 realm_access.roles 含 arcane-admin)映射到 Arcane 的 admin role 就行。
2. compose 文件相对路径。上面那个挂载一致性问题。如果你原本的 compose 用了 ./config 之类的相对路径,Arcane 容器里看到的根不是宿主机 /opt/stacks,是它自己的工作目录,路径就会错。要么改绝对路径,要么把容器内路径对齐。
它不适合谁
我得说清楚:
- 想要 Kubernetes UI → 别选它,Arcane 只管 Docker 和 Swarm,K8s 是 Portainer 的强项
- 想要漏洞扫描内嵌到部署流 → Dockhand 更对路,它把 Grype/Trivy 嵌进 safe-pull 流程
- 想完全离线、零依赖 → 严格说 Arcane 没问题(Go + SQLite),但有些 Web UI 体验依赖 WebSocket,记得反代要支持
- 公司里需要 RBAC 多级权限 → Arcane 现在 RBAC 还在补,等不及的先用 Portainer BE
我的结论
如果你的 Docker 面板只是为了 看容器状态、看日志、改改 compose 文件,Arcane 完全够用,而且会让你少记几个 docker 命令。如果你的需求是「管理 1-2 台机器 + 不想再被付费墙卡脖子」,它就是当下最合适的选择。
至于我?我已经迁了两个月了,没回去过。
(注:文中 RAM 对比数据来自外部实测贴 erhanbasturk.com.tr 2026-06-29,我的环境实测数字接近但不完全一致,仅供参考。)