不想每次都敲 docker 命令用 Portainer CE 在 fnOS 上做一个可视化容器控制台前言我并不排斥命令行真正让我觉得麻烦的是那些高频、重复、又很容易看漏的信息容器到底有没有启动、端口映射到哪里、日志刚刚报了什么、哪个镜像还在占空间、某个数据卷到底有没有挂上。命令当然都能查但服务一多每次都在docker ps、docker logs、配置文件和终端之间来回切效率就开始下降。Portainer CE 对我最有吸引力的地方不是“彻底告别命令行”而是先把这些日常管理动作集中到一个 Web 页面里需要深挖时再回终端。尤其是 NAS 上容器越装越多以后我更希望先看到全局再决定问题值不值得继续往底层查。这次我在飞牛 NAS 上部署 Portainer CE先确认 Docker 环境再拉取portainer/portainer-ce:latest创建portainer_data数据卷并把/var/run/docker.sock挂进容器。Web 管理页面通过9000访问实际查看了容器列表、日志、详细信息、镜像、数据卷和账户管理等入口。局域网确认可用后再安装 cpolar把9000页面提供到公网先验证随机地址再切换到固定二级子域名Portainer-CE。整篇我会把“Portainer 能看到什么”“这次实际操作了什么”和“公网入口意味着什么”分开写不把图形界面等同于零门槛也不把远程可访问等同于可以忽略管理权限风险。1. Portainer CE 解决的是“看得见”不是替代 DockerPortainer CE 是一个容器管理平台。它的价值不在于绕开 Docker而是把很多原本需要命令行完成的管理动作放进 Web 页面。常见能力包括查看、启动、停止、重启和删除容器查看日志和资源状态管理镜像、数据卷和网络通过 Stack 管理 Compose管理本地和远程 Docker 环境提供用户和权限相关入口。对我来说它更像Docker 的可视化操作层。底层容器还是 Docker 在跑Portainer 只是让我先从一个页面看全局。商业版里更高级的权限、审计和高可用能力不在这次实际操作范围里所以后面只围绕 CE 版当前页面和 Docker 管理来写。2. 先在飞牛 NAS 上开启 SSH进入飞牛系统设置打开SSH 服务这里没有单独给出 SSH 登录命令后面的命令都默认已经进入飞牛 NAS 终端。3. 确认 Docker 环境执行docker-vsystemctl status-v这里第一条docker -v用于查看 Docker 版本。第二条写的是systemctl status -v如果执行结果和预期不一致先确认自己真正要检查的是哪个 systemd 服务不要因为终端返回异常就直接判断 Docker 不可用。也可以直接从飞牛主页确认 Docker 是否已经安装并运行。4. 拉取 Portainer CE 镜像执行dockerpull portainer/portainer-ce:latest这里使用portainer/portainer-ce:latest也就是直接拉取 latest 标签。如果以后长期运行更适合自己记录当前实际使用的版本避免重建时只知道“latest”却不知道原来跑的是哪一个具体版本。5. 先创建 Portainer 自己的数据卷执行dockervolume create portainer_data这一步创建portainer_data后面的 Portainer 配置、账户等数据会通过这个卷挂到/data所以即使容器本体重建数据卷仍然可以独立保留。6. 启动 Portainer 容器执行dockerrun-d\-p8001:8000\-p9000:9000\--nameportainer\--restartalways\-v/var/run/docker.sock:/var/run/docker.sock\-vportainer_data:/data\portainer/portainer-ce:latest这条命令值得看清几个参数。端口8001:80009000:9000后面浏览器实际使用的是9000容器名portainer重启策略--restartalwaysDocker Socket/var/run/docker.sock:/var/run/docker.sock这是 Portainer 能直接管理当前 Docker 环境的关键连接。也正因为这样Portainer 并不是一个普通展示页面。它拿到的是容器管理入口所以账户和公网访问不能按普通静态网页的安全级别来对待。Portainer 数据portainer_data:/data这和前面创建的数据卷对应。7. 先检查容器有没有真正跑起来执行dockerps继续查看日志dockerlogs portainer这两条命令我还是会保留在自己的排查习惯里。Portainer 能把日常管理搬到 Web 上不代表命令行从此没有价值。遇到 Portainer 自己启动失败时最直接的排查入口仍然是容器状态 容器日志。8. 浏览器打开 Portainer CE部署完成以后访问http://飞牛IP:9000页面能打开说明飞牛 Docker → Portainer 容器 →9000:9000→ 浏览器这一层已经跑通。当前命令同时还映射了8001:8000但这套 Web 管理操作统一从9000进入。9. 第一次进入先创建管理员账户首次打开需要注册用户并设置密码。登录以后进入 Portainer CE 首页。这里我会认真设置管理员密码。因为后面这个页面不只是“看看状态”它可以直接操作容器、镜像和数据卷。如果准备继续做公网访问管理账户本身就应该先处理好。10. 容器列表先把运行状态和端口看清进入容器相关页面以后可以查看当前容器。这里最实用的是集中看到当前状态端口容器名称相关基础信息。对我来说这就是 Portainer 比反复敲命令更省事的地方。不是 Docker 命令做不到而是服务多起来以后我更想先用列表定位再决定是否需要进终端。11. 日志入口不用先回忆 docker logs 参数继续进入对应容器。这里可以直接查看容器日志。页面里还有另一组日志入口展示。如果只是排查最近的启动报错、请求异常或容器输出我通常会先在这里看。需要更复杂的过滤和脚本处理时再回命令行。12. 容器详细信息也可以直接展开继续进入详情页面。这里能看到更完整的容器配置和运行信息。这类页面适合快速确认我以为自己启动的参数和容器当前实际参数是不是一回事。尤其端口、挂载、环境变量一多用图形界面先扫一遍会更直观。13. 镜像管理进入镜像页面可以查看当前镜像列表。页面里还提供新的镜像操作入口。如果准备清理、拉取或者检查镜像我会先从这里确认现状再决定是否需要回到命令行处理更复杂的操作。14. 数据卷管理进入 Volumes 页面。可以继续添加数据卷。这一部分和前面的portainer_data正好对应。Portainer 自己也依赖 Docker Volume 保存数据而现在又可以从同一个页面继续管理其他卷。对 NAS 用户来说这一块比“看起来漂亮”更重要因为容器重建之后数据还在不在最终往往就取决于挂载和卷有没有处理对。15. 账户管理Portainer CE 页面还展示了新增账户入口。也可以修改已有账户密码。页面中还有其他管理入口。更复杂的团队、角色和商业版权限能力并不是这套操作的重点先把当前管理员账户和基础用户入口用清楚更实际。16. 局域网管理够用了为什么还要继续做公网入口如果 Portainer 只在家里或者办公室内部使用http://飞牛IP:9000已经够了。但如果人在外面需要临时确认容器状态、看一眼日志或者处理服务就会碰到局域网地址不可达的问题。这里再加入 cpolar。cpolar 在这套方案里只负责把 Portainer 的9000Web 管理页面提供到公网。它不管理容器、不读取 Docker Socket也不替 Portainer 做镜像和数据卷管理。17. 安装 cpolar执行sudocurlhttps://get.cpolar.sh|sh安装完成以后检查状态sudosystemctl status cpolar服务正常后从浏览器通过主机 IP 9200打开 cpolar Web UI。页面里的入口写成http://ip:9200实际超链接目标是http://localhost:9200/登录以后开始配置 Portainer 隧道。18. 先创建随机公网地址进入隧道管理 → 创建隧道当前参数为隧道名称Portainer-CE协议http本地地址9000域名类型随机域名地区China Top这里映射的是 Portainer Web 实际访问端口9000创建完成以后查看在线隧道列表。使用公网地址访问。页面能够正常打开。这一层真正验证的是Portainer9000→ cpolar HTTP 公网地址 → 外部浏览器。19. 长期访问再切固定二级子域名随机地址适合先确认连通性。如果后面要长期收藏入口再继续预留固定二级子域名。进入预留页面。当前参数为地区china Top二级子域名Portainer-CE预留成功以后回到隧道列表。编辑原来的 Portainer 隧道域名类型二级子域名Sub Domain填写前面预留成功的名称地区China Top点击更新。更新后查看在线隧道列表。最后再从外部设备打开固定公网地址。Portainer 页面能够正常访问。20. Portainer 真正适合解决什么问题我不会把它理解成“装了以后再也不用命令行。”更准确的用法是日常管理先图形化复杂排查再回终端。看容器状态、端口、日志、镜像和卷Portainer 很方便。但碰到Portainer 自己起不来Docker daemon 有问题网络或存储底层异常需要脚本化批量处理命令行依然是重要工具。这反而是我更喜欢它的原因。它没有逼我在 GUI 和 CLI 之间二选一而是把最重复的部分先拿走。总结这次真正跑通的主线是飞牛 NAS → SSH → Docker →portainer/portainer-ce:latest→portainer_data→/var/run/docker.sock→8001:80009000:9000→ Portainer CE → 初始化管理员 → 容器 / 日志 / 详情 → 镜像 → 数据卷 → 账户 → cpolar →9000随机公网 → 固定二级子域名Portainer-CE。几个细节需要继续留意systemctl status -v如果执行结果异常先确认真正要查看的 systemd 服务Portainer 容器同时映射8001:8000和9000:9000但 Web 管理页面实际使用9000portainer_data:/data用于 Portainer 自身数据卷/var/run/docker.sock:/var/run/docker.sock让 Portainer 可以直接管理当前 Docker 环境所以公网暴露这个管理页面时更要重视账户和访问范围cpolar 只负责9000Web 页面的公网入口不参与 Docker 或 Portainer 管理逻辑固定二级子域名示例继续使用Portainer-CE。对我来说Portainer CE 最实用的地方不是 UI 看起来多干净而是我终于不用为了确认一个端口、翻一段日志、看一个数据卷每次都先把命令重新敲一遍。真正需要深入的时候终端还在那里日常维护的时候先用一个页面把情况看清楚就够了。
阅读完成 · 觉得有帮助?