极空间部署Portainer实战:Docker Socket、9000端口、容器管理与固定地址访问


🔥承渊政道: 个人主页
❄️个人专栏: 《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真正解决什么问题

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连接极空间

执行:

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上的其他容器自动获得额外安全保护。

🚀真正的勇者不是流泪的人,而是含泪奔跑的人!


敬请期待下一篇文章内容


每日心灵鸡汤: 守住内心的光亮,积极面对生活!

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

相关推荐
一个天蝎座 白勺 程序猿12 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
cpolar技术支持13 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
分布式存储与RustFS16 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希12317 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾18 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
闲云自留地1 天前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达1 天前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落1 天前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng1 天前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮1 天前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频