项目:portainer/portainer | 星数:38748 | 语言:TypeScript | 协议:zlib | GitHub仓库
更新日期:2026-10-30 · 作者:CodeArts 编辑部
我有一台跑着二十多个容器的家用服务器。每次查某个容器为什么挂了,都要 SSH 上去敲 docker ps -a、docker logs、docker stats,来回切窗口。装了 Portainer 之后,浏览器里一眼就能看到所有容器的状态、CPU 占用、日志尾巴,重启和改环境变量也是点几下的事。
Portainer Community Edition(CE)是 38748 星的开源容器管理面板,zlib 协议,支持 Docker、Swarm、Podman、Kubernetes 和 ACI。它本身就是一个容器,部署成本极低,是入门容器管理最省心的方案之一。
docker volume create portainer_data docker run -d -p 8000:8000 -p 9443:9443 \ --name portainer --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest
然后访问 https://服务器IP:9443 创建管理员账号。注意新版默认只开 HTTPS 的 9443 端口,不再默认开 9000 的 HTTP——很多人按旧教程访问 9000 打不开,就是因为这个。
| 能力 | CE 社区版 | BE 商业版 |
|---|---|---|
| 容器/镜像/网络/卷管理 | 支持 | 支持 |
| 多用户与团队 | 基础账号 | 细粒度 RBAC |
| GitOps 自动部署 | 不支持 | 支持 |
| 边缘设备管理 | 不支持 | 支持 |
| 审计日志、SSO | 无 | 有 |
| 适用场景 | 个人、家用、学习 | 生产、企业 |
官网明确写了 CE 面向 homelab、学习环境和个人项目,不建议直接用于生产业务。这话不是销售话术——CE 缺少审计与细粒度权限,多人协作时出问题无法追责。
和所有需要操作 Docker 的面板一样,Portainer 挂载了 docker.sock,等于拥有宿主机 root 能力。一旦面板被攻破,攻击者可以用 API 启一个特权容器挂载宿主根目录。至少做好这四件事:
我就见过一台服务器因为面板弱口令被扫到,攻击者通过 API 起容器挖矿,CPU 打满才发现。
一是快速看日志。容器卡住时,Portainer 的日志面板可以按行数拉取并实时跟随,比 SSH 更快。缺点是一次拉太多行会卡浏览器,看近期 500 行就够。
二是用 Stacks 管理 Compose。Portainer 的 Stack 本质就是 docker-compose,可以直接粘贴 YAML 部署、修改后一键重新部署、查看每个服务的状态。我在家用它管了七八个 stack,配置文件都集中在这里,比散落在各目录的 docker-compose.yml 好维护。
三是环境变量与卷的可视化。改一个环境变量只需在界面里改,Portainer 会自动重建容器。手工部署时这一步最烦,容易漏掉参数导致容器起不来。
只有两三个容器、且习惯命令行的话,Portainer 是多余的——它本身还要占几百 MB 内存。命令行 docker stats 加 lazydocker 这类 TUI 工具已经够用。真正值得装的场景是:容器数量超过十个、有非技术成员需要查看状态、或者需要图形化管 Compose 栈。
Portainer 新版本默认只映射并启用 HTTPS 的 9443 端口,9000 的 HTTP 端口不再默认开放。直接访问 https://IP:9443 并在浏览器确认自签证书即可,旧教程里的 9000 是历史版本行为。
可以停止 Portainer 容器后运行官方的重置密码辅助命令(重建 admin 账号),它会重置管理员凭据但保留已管理容器的数据。注意数据卷 portainer_data 不可删除,删了就丢全部配置。
可以。其他机器通过 Portainer Agent 接入:在目标服务器上跑一个 agent 容器,然后从主面板添加环境并填写 agent 地址。CE 版本支持有限数量的环境接入。