
🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C++知识内容》 《Linux系统与网络知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》 《Python知识内容》 《cpolar知识学习》
✨逆境不吐心中苦,顺境不忘来时路!✨ 🎬 博主简介:

Docker服务刚装两三个时,命令行管理并不麻烦:
docker ps看状态,docker logs查日志,偶尔再手动启停容器.但当NAS里的服务越来越多,真正影响效率的往往不是命令不会用,而是每次都要记容器名、端口和参数,紧急排查时还得在多个终端命令之间来回切换.这次我把Portainer部署到极空间,先通过SSH确认Docker环境,再把宿主机的Docker Socket挂进容器,让Portainer能够直接读取并操作本机Docker.部署完成以后继续初始化账号、进入local环境,实际查看本地容器列表,并完成容器启停和状态详情查看.本地9000端口跑通以后,再给Portainer增加外部访问入口,从随机公网地址切换到固定二级子域名.整篇重点不是把Portainer写成"点一点就能替代所有Docker命令",而是把极空间 → Docker → Portainer → 容器管理 → 远程访问这条链真正跑通,同时把Docker Socket和公网管理入口的权限风险说明白.这类工具真正有价值的地方,也不只是"把命令做成按钮",而是当容器数量上来以后,可以先在一个页面里判断谁在运行、谁停了、哪个需要进入详情,再决定要不要继续回到终端处理.这样巡检和排错路径会更清楚.


目录
- 1.Portainer真正解决什么问题
- 2.先把Portainer和Docker的关系说清楚
- 3.这篇实际要跑通哪些步骤
- 4.通过SSH连接极空间
- 5.检查Docker环境
- [6.用docker run启动Portainer](#6.用docker run启动Portainer)
- [7.9000端口负责Portainer Web入口](#7.9000端口负责Portainer Web入口)
- 8.第一次使用先创建管理员账号
- 9.按这次流程重启Portainer
- 10.选择local环境
- [11.为什么Docker Socket这么重要](#11.为什么Docker Socket这么重要)
- 12.实际查看本地容器
- 13.实际测试容器启停
- 14.继续查看容器详情
- 15.Portainer不是让Docker命令失去意义
- 16.本地管理到这里已经跑通
- 17.公网开放Portainer比开放普通Web服务更敏感
- 18.安装cpolar
- [19.打开cpolar Web UI](#19.打开cpolar Web UI)
- 20.给9000创建随机公网入口
- 21.查看随机公网地址
- 22.随机地址更适合先验证
- 23.保留固定二级子域名
- 24.编辑Portainer隧道
- 25.查看固定地址
- 26.最后从外部设备访问
- 27.固定地址解决的是"入口稳定"
- 28.这篇真正验证了哪些能力
- 29.这套方案更适合什么场景
- 30.最后把完整技术链重新看一遍
- 总结
1.Portainer真正解决什么问题
Portainer更适合被理解成:
Docker环境的Web管理界面。
当一台NAS上已经有多个容器时,它可以把很多常见操作集中到浏览器里,例如:
- 查看容器列表;
- 查看运行状态;
- 启动和停止容器;
- 查看容器详情;
- 继续进入对应资源页面。
这篇实际验证的是:
本地Docker环境识别、容器启停和状态详情。
至于镜像构建、卷、网络、Swarm等能力,虽然Portainer本身可以围绕这些资源继续管理,但这组步骤没有逐项演示,所以不把它们写成已经全部实测完成。
2.先把Portainer和Docker的关系说清楚
Portainer不是另一个容器运行时。
真正运行容器的仍然是:
Docker。
Portainer负责的是:
通过Web界面读取和操作Docker。
这篇最关键的一行配置其实不是9000端口,而是:
/var/run/docker.sock:/var/run/docker.sock
它让Portainer容器可以连接宿主机Docker守护进程。
也正因为如此,Portainer具备很高的管理权限。
3.这篇实际要跑通哪些步骤
整条链可以拆成:
- 极空间开启SSH;
- 检查Docker;
- Docker启动Portainer;
- 浏览器访问9000;
- 初始化管理员;
- 进入local环境;
- 查看并操作本地容器;
- 给9000增加外部访问入口。
先把本地Docker管理跑通,再处理远程访问。
4.通过SSH连接极空间
执行:
shell
ssh root@IP
页面:

后面的Docker部署都通过SSH终端完成。
5.检查Docker环境
执行:
shell
docker -v
systemctl status -v
结果:

确认极空间上的Docker已经可用以后,再继续部署Portainer。
6.用docker run启动Portainer
执行:
shell
docker run -d \
-p 9000:9000 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer
结果:

这条命令里几个参数最关键:
- Web端口:
9000:9000 - 容器名:
portainer - 重启策略:
--restart=always - Docker Socket:
/var/run/docker.sock:/var/run/docker.sock - Portainer数据卷:
portainer_data:/data - 镜像:
portainer/portainer
7.9000端口负责Portainer Web入口
浏览器访问:
http://极空间IP:9000
页面:

做到这里,可以确认:
浏览器 → 极空间9000 → Portainer
已经跑通。
8.第一次使用先创建管理员账号
初始化页面:

Portainer后面能够管理本机Docker,所以这个账号不是普通导航页账号。
如果以后准备公网访问,密码强度要按高权限管理后台来对待。
9.按这次流程重启Portainer
页面:

执行:
shell
docker stop portainer
docker start portainer
重启以后重新进入:

再次输入账号密码。
登录成功:

10.选择local环境
进入Portainer以后选择:
local
页面:

继续:

这里显示的是本机Docker环境。
能够看到local环境,说明前面的Docker Socket连接已经发挥作用。
11.为什么Docker Socket这么重要
这次部署里挂载了:
/var/run/docker.sock
所以Portainer不是只能"看"容器。
它可以通过Docker API继续执行高权限操作。
例如:
- 启动;
- 停止;
- 重启;
- 查看配置;
- 操作Docker资源。
这也是Portainer好用的原因之一,同时也是它不能随便公开的原因。
12.实际查看本地容器
页面:

这里已经能看到极空间里正在运行的本地服务。
相比每次执行docker ps,Web界面更适合快速浏览:
- 容器名称;
- 当前状态;
- 对应操作入口。
13.实际测试容器启停
页面:

这一步证明的是:
Portainer → Docker Socket → 本地容器
操作链已经跑通。
所以这篇可以明确写:
容器启停已经实测。
14.继续查看容器详情
进入具体容器:

继续查看:

页面:

这一层更适合在排查问题时使用。
当你已经知道"哪个容器有问题",再从详情页继续看状态和配置,比在一堆容器之间反复切换更直观。
15.Portainer不是让Docker命令失去意义
图形界面适合:
- 快速巡检;
- 容器启停;
- 看状态;
- 找服务;
- 进入详情。
但复杂场景仍然可能需要回到命令行,例如:
- 批量脚本;
- Compose自动化;
- CI/CD;
- 精细日志处理;
- 故障恢复;
- 特殊网络排查。
所以更准确的定位是:
Portainer降低常见Docker运维的操作成本。
而不是:
从此不需要CLI。
16.本地管理到这里已经跑通
现在已经完成:
极空间
↓
Docker
↓
Portainer
↓
9000
↓
管理员账号
↓
local环境
↓
容器列表
↓
容器启停
↓
容器详情
如果只在家里局域网管理Docker,到这里已经可以使用。
17.公网开放Portainer比开放普通Web服务更敏感
Portainer背后连接的是宿主机:
docker.sock
也就是说,一旦有人拿到Portainer高权限账号,就可能进一步操作本机Docker环境。
所以公网访问时不能只看:
"9000能不能打开。"
还要同时考虑:
- Portainer管理员密码;
- Docker Socket权限;
- 公网地址传播范围;
- 是否需要长期开放;
- NAS里还有哪些敏感容器。
18.安装cpolar
执行:
shell
sudo curl https://get.cpolar.sh | sh
结果:

安装完成以后检查服务状态:
shell
sudo systemctl status cpolar
结果:

确认cpolar正常运行以后,再进入Web管理页面。
19.打开cpolar Web UI
浏览器访问:
极空间IP:9200
页面:

登录以后开始为Portainer创建隧道。
20.给9000创建随机公网入口
创建参数:
- 隧道名称:
Portainer - 协议:HTTP
- 本地地址:
9000 - 域名类型:随机域名
- 地区:
China Top
页面:

这里映射的是:
Portainer Web管理页面9000端口。
21.查看随机公网地址
创建完成以后进入在线隧道列表:

从其他网络访问:

能够正常打开以后,可以确认:
外部浏览器 → 公网地址 → Portainer:9000
已经跑通。
22.随机地址更适合先验证
随机公网地址更适合:
- 临时远程运维;
- 先确认链路;
- 偶尔查看。
如果准备长期收藏这个入口,再继续配置固定二级子域名。
23.保留固定二级子域名
进入预留页面:

本次示例名称:
porr
结果:

实际使用时,以自己账号最终成功保留的名称为准。
24.编辑Portainer隧道
回到隧道列表:

修改:
- 域名类型:二级子域名;
- Sub Domain:已经保留的名称;
- 地区:
China Top。
更新:

25.查看固定地址
进入在线隧道列表:

可以看到随机地址已经切换成固定二级子域名形式。
26.最后从外部设备访问
使用固定地址:

能够正常进入以后,长期远程入口完成。
整条链现在变成:
外部浏览器 → 固定公网地址 → Portainer:9000 → Docker Socket → 本机Docker
27.固定地址解决的是"入口稳定"
固定二级子域名主要解决:
- 浏览器长期收藏;
- 外出时不用重新找随机地址;
- 多设备使用同一个Portainer入口。
它解决的是:
访问入口不频繁变化。
并不代表:
- Portainer账号自动安全;
- Docker Socket风险消失;
- NAS所有容器都适合远程操作;
- 地址可以公开分享;
- Docker管理变成零风险。
28.这篇真正验证了哪些能力
已经实际跑通:
- SSH登录极空间;
- Docker环境检查;
- Portainer容器部署;
- 9000本地访问;
- 管理员初始化;
- Portainer重启;
- local环境识别;
- 本地容器展示;
- 容器启停;
- 容器详情;
- 随机公网访问;
- 固定公网入口。
没有在这组步骤里完整验证:
- 镜像构建;
- 网络创建;
- Volume管理;
- Swarm集群;
- 多主机环境;
- 团队权限体系。
这些能力如果后面需要,可以再单独做实操。
29.这套方案更适合什么场景
比较适合:
- NAS里Docker服务越来越多;
- 经常需要查看容器状态;
- 不想每次都记容器名;
- 需要快速启停服务;
- 想用浏览器查看Docker环境;
- 需要偶尔从外部网络管理。
如果只有一两个容器,而且长期稳定运行,命令行已经够用。
Portainer真正体现价值,通常是在:
容器数量增加以后。
30.最后把完整技术链重新看一遍
基础环境:
极空间 → SSH → Docker
Portainer:
docker run → 9000
高权限连接:
/var/run/docker.sock
数据:
portainer_data:/data
本地管理:
管理员 → local → 容器列表 → 启停 → 详情
随机远程:
公网随机地址 → 9000
固定远程:
固定二级子域名 → 9000
实际完成:
- SSH;
- Docker检查;
- Portainer安装;
- Docker Socket挂载;
- 数据卷;
- 9000访问;
- 管理员账号;
- 容器重启;
- local环境;
- 容器列表;
- 容器启停;
- 容器详情;
- cpolar安装;
- 随机公网访问;
- 固定二级子域名;
- 外部设备访问。
这样Portainer才真正从"一个Docker图形界面",变成一套可以长期查看和操作极空间本地容器、并支持远程访问的Web管理入口。
总结
这次真正跑通的是一条完整的Portainer管理链:先通过SSH进入极空间并确认Docker环境,再用docker run启动Portainer,把9000端口、portainer_data数据卷和宿主机Docker Socket一起配置好。
本地验证没有停在"登录页能打开"。后面继续完成管理员初始化、进入local环境、查看本地容器列表,并实际测试容器启停和状态详情。这样才能确认Portainer已经真正获得本机Docker管理能力,而不是单纯提供一个Web页面。
需要特别注意的是,/var/run/docker.sock带来的权限很高。正因为Portainer可以通过它直接操作Docker,公网开放时就不能把它当普通网站处理;管理员密码、公网地址传播范围以及哪些人可以进入管理页面,都应该比"访问是否方便"更优先。
远程部分是在本地容器管理已经正常以后再增加的能力。随机公网地址先验证9000链路,固定二级子域名再解决长期入口变化的问题;固定地址只是让Portainer入口更稳定,不代表Docker Socket、管理员账号和NAS上的其他容器自动获得额外安全保护。

🚀真正的勇者不是流泪的人,而是含泪奔跑的人!
敬请期待下一篇文章内容
每日心灵鸡汤: 守住内心的光亮,积极面对生活!
如何在生活中保持积极的心态?遇到烦心事不钻牛角尖,学会及时疏导负面情绪,不任由烦恼不断发酵.接纳生活与学习里的不完美,明白挫折本就是成长路上的常态.多留意身边微小的美好,把每一次小小的进步都当作值得肯定的收获.遇到困难先想解决办法,而不是一味陷入焦虑和自我怀疑.少和他人盲目攀比,专注走好属于自己的成长道路.累的时候适当休息调整,养足精神再继续前行.守住内心的光亮,积极的心态便能长久相伴.
