最近在折腾项目的时候碰到了这个知识点,查了不少资料,索性整理出来分享给大家。
🔥承渊政道:个人主页
❄️个人专栏: 《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
- 7.9000端口负责Portainer Web入口
- 8.第一次使用先创建管理员账号
- 9.按这次流程重启Portainer
- 10.选择local环境
- 11.为什么Docker Socket这么重要
- 12.实际查看本地容器
- 13.实际测试容器启停
- 14.继续查看容器详情
- 15.Portainer不是让Docker命令失去意义
- 16.本地管理到这里已经跑通
- 17.公网开放Portainer比开放普通Web服务更敏感
- 18.安装cpolar
- 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.这篇实际要跑通哪些步骤
整条链可以拆成:
1. 极空间开启SSH;
2. 检查Docker;
3. Docker启动Portainer;
4. 浏览器访问9000;
5. 初始化管理员;
6. 进入local环境;
7. 查看并操作本地容器;
8. 给9000增加外部访问入口。
先把本地Docker管理跑通,再处理远程访问。
4.通过SSH连接极空间
执行:
ssh root@IP
页面:
后面的Docker部署都通过SSH终端完成。
5.检查Docker环境
执行:
docker -v
systemctl status -v
结果:
确认极空间上的Docker已经可用以后,再继续部署Portainer。
6.用docker run启动Portainer
执行:
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
页面:
执行:
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资源。
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
执行:
sudo curl https://get.cpolar.sh | sh
结果:
安装完成以后检查服务状态:
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管理链:先通过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上的其他容器自动获得额外安全保护。
🚀真正的勇者不是流泪的人,而是含泪奔跑的人!
敬请期待下一篇这篇东西
每日心灵鸡汤: 守住内心的光亮,积极面对生活!
如何在生活中保持积极的心态?遇到烦心事不钻牛角尖,学会及时疏导负面情绪,不任由烦恼不断发酵.接纳生活与学习里的不完美,明白挫折本就是成长路上的常态.多留意身边微小的美好,把每一次小小的进步都当作值得肯定的收获.遇到难先想解决办法,而不是一味陷入焦虑和自我怀疑.少和他人盲目攀比,专注走好属于自己的成长道路.累的时候适当休息调整,养足精神再继续前行.守住内心的光亮,积极的心态便能长久相伴.
本次分享就到这里。技术这东西越研究越有意思,后续有新的收获我也会继续更新。
评论 (0)
暂无评论