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

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


敬请期待下一篇文章内容


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

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

相关推荐
Shadow(⊙o⊙)1 小时前
仿muduo实现高并发服务器——EPOLL设置与移除Poller.hpp管理Channel
运维·服务器·c++
.冰块.1 小时前
VMware+Ubuntu24.04 kubeadm 部署 K8s 1.30.2 三节点集群
运维·云原生·容器·kubernetes·k8s·容器编排
Vitaliy Kostrov(柯维远)1 小时前
客户端如何检查直播流:从流内标记到停止播放
android·运维·服务器·驱动开发·网络安全·系统架构·cdn
软件工程师文艺1 小时前
PLM系统的下一个十年:从MBD模型定义到产线仿真的技术路线拆解
运维·服务器·网络
SoStraw1 小时前
没有公网IP怎么远程SSH?设备只装 p2pssh-server,File2File 一键连回去
ssh·内网穿透·远程ssh·webrpc·无公网ip·file2file·p2pssh
有为少年1 小时前
容器内存显示 100%、进程莫名被 Killed 解决方案
机器学习·容器·模型训练·模型推理
禁默1 小时前
玩客云部署EasyVoice实战:HiNas、Docker、ARMv7、9001与固定地址访问(1)
docker·容器·语音识别·cpolar
Brilliantwxx1 小时前
【Linux】IO(上)全篇:文件本质、C 接口、系统调用与文件描述符
linux·运维·服务器·c语言
北风toto1 小时前
Linux 服务器通过 tgz 离线部署 Docker
linux·服务器·docker