Portainer 管理家用服务器 Docker:容器面板离开局域网也能安全打开

Portainer 远程管理 Docker 封面

家里那台小主机、NAS、旧电脑跑的 Docker 服务一多,最烦的不是部署,而是人不在局域网里时突然想看一眼:哪个容器挂了?日志有没有报错?要不要重启一下?

SSH 能解决,但每次都敲命令不够顺手。Portainer 更适合这种场景:它把 Docker 容器、镜像、卷、网络、日志、重启操作都放到一个 Web 面板里。本文按家用服务器场景走一遍:先用 Docker Compose 部署 Portainer CE,再接入本机 Docker,确认能看容器和日志;需要临时在外面打开面板时,再用 cpolar 映射 Portainer 的 HTTPS 管理端口。

图1:Portainer 管理家用服务器 Docker 与远程访问链路图

1 什么是 Portainer?这篇里它负责什么

Portainer 是一个 Docker 可视化管理面板。官方仓库 portainer/portainer 在 GitHub 上有 37523 stars、2830 forks,2026-05-23 仍有更新,说明它不是冷门小工具。

这篇文章里,不把 Portainer 写成“万能运维平台”。它只负责三件很实用的事:

  • 看家用服务器上有哪些容器在跑;
  • 打开容器日志,判断服务有没有报错;
  • 在浏览器里停止、启动、重启容器。

如果你已经习惯 docker psdocker logsdocker restart,Portainer 不是必需品。但家里服务越来越多之后,面板的好处很明显:少记命令、少切终端,排查时能更快定位到目标容器。

这里提醒一句:Portainer 会挂载 /var/run/docker.sock,这意味着它能管理当前机器上的 Docker。面板账号一定要用强密码,远程访问也要按需打开,不要把管理入口长期裸放在外面。

2 环境准备:先确认 Docker 能正常工作

本文以 Linux 家用服务器为例,Ubuntu、Debian、装了 Docker 的小主机、NAS 类系统都能参考。开始前先确认三件事:

  • Docker Engine 已安装并运行;
  • 当前用户能执行 dockerdocker compose
  • 服务器在局域网里有固定 IP,或者你知道它当前的局域网 IP。

在服务器终端执行下面几条命令:

docker version
docker compose version
docker ps

能看到 Docker 版本、Compose 版本,并且 docker ps 没有报权限错误,就能继续。

如果 docker ps 提示 permission denied,先用 sudo docker ps 验证 Docker 本身是否正常。生产环境里建议把用户加入 docker 组后重新登录:

sudo usermod -aG docker $USER

这一步做完要重新登录终端,组权限才会生效。这里别急着往下部署,权限没处理好,后面 Portainer 即使容器跑起来,也会在管理 Docker 时出问题。

这一步以终端输出为准:docker versiondocker compose versiondocker ps 都能正常返回,就可以继续部署 Portainer。

3 使用 Docker Compose 部署 Portainer CE

Portainer 官方文档提供了 Docker Compose 部署方式,默认管理入口是 9443,镜像使用 portainer/portainer-ce:lts。这里保留 9443,不再额外开放旧版 HTTP 端口 9000

新建一个目录放 Compose 文件:

mkdir -p ~/portainer
cd ~/portainer
nano portainer-compose.yaml

写入下面内容:

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:lts
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    ports:
      - "9443:9443"

volumes:
  portainer_data:
    name: portainer_data

networks:
  default:
    name: portainer_network

官方示例里还包含 8000:8000,这个端口用于 Edge Agent 场景。家用服务器只管理本机 Docker 时,这里先不开放,面板更干净,排错也少一个变量。

保存后启动:

docker compose -f portainer-compose.yaml up -d

查看容器状态:

docker ps --filter name=portainer

正常会看到 portainer/portainer-ce:lts 正在运行,并且端口映射里有 0.0.0.0:9443->9443/tcp

图2:Docker Compose 部署 Portainer,并按需通过 cpolar 映射 9443 管理端口

如果这里看不到容器,先查 Compose 日志:

docker compose -f portainer-compose.yaml logs --tail=100

常见问题就两类:镜像拉取失败、端口被占用。端口被占用时,用下面命令找占用进程:

sudo lsof -i :9443

不要直接改成一个自己都记不住的端口。管理面板端口越乱,后面局域网访问和远程映射越容易填错。

4 首次登录:创建管理员并接入本机 Docker

在浏览器里打开:

https://服务器局域网IP:9443

例如服务器 IP 是 192.168.1.20,访问地址就是:

https://192.168.1.20:9443

Portainer 默认在 9443 上使用自签名证书,浏览器会提示证书不受信任。这是自签名证书的正常表现,确认访问的是自己服务器的局域网 IP 后继续进入即可。

浏览器如果提示自签名证书不受信任,确认地址是自己的服务器局域网 IP 后继续访问即可。

首次进入会要求创建管理员账号。这里别用 admin123、生日、手机号这类弱密码。这个账号能操作 Docker,密码强度要按“服务器管理入口”来对待。

创建完成后,Portainer 会进入环境接入页面。本文部署时已经挂载了 Docker socket,所以选择本地 Docker 环境即可。进入 Home 页面后,点进本机环境,能看到 Containers、Images、Volumes、Networks 等菜单。

首次进入 Portainer 时按页面提示创建管理员账号,密码按服务器管理入口标准设置。

创建完成后进入本机 Docker 环境,确认能看到 Containers、Images、Volumes、Networks 等菜单。

如果页面里没有本机 Docker 环境,优先检查 Compose 文件里这一行有没有写对:

- /var/run/docker.sock:/var/run/docker.sock

这行是 Portainer 管理本机 Docker 的关键。少了它,Portainer 只是一个空面板,看不到宿主机上的容器。

5 用 Portainer 查看容器、日志和重启服务

部署面板不是为了好看,先拿一个真实操作验证链路。

进入 Portainer 后打开本机环境,点击 Containers。这里会列出当前服务器上的容器,包括 Portainer 自己。列表里重点看三列:容器名称、状态、端口映射。

容器列表里重点看名称、状态和端口映射;先确认 Portainer 自己处于 running 状态。

点进某个容器,可以看到容器详情。日常排查最常用的是这几个动作:

  • Logs:查看容器日志;
  • Stats:看 CPU、内存、网络使用情况;
  • Restart:重启容器;
  • Console:进入容器内部执行命令。

这里建议先点 Portainer 容器自己的 Logs。能看到启动日志,说明面板读取容器信息没有问题。

查看日志时,优先用 Portainer 的 Logs 页面验证;必要时再回到终端执行 docker logs --tail=50 portainer 交叉确认。

如果日志页面空白,先不要怀疑 Portainer。回到服务器终端执行:

docker logs --tail=50 portainer

终端能看到日志而 Portainer 看不到,再检查 Portainer 容器状态和浏览器页面。终端也看不到日志,就说明这个容器本身没有输出对应日志,不是面板问题。

重启服务也很直接:勾选容器,点 Restart。这一步不是为了随便点按钮,而是确认 Portainer 对本机 Docker 有实际控制权限。

操作自己的业务容器前,建议先确认它有没有数据写入、有没有正在处理的任务。数据库、下载器、同步盘这类服务,不要在不了解状态时直接重启。

6 局域网访问:把入口固定下来

Portainer 能在局域网里打开后,建议给家用服务器固定一个局域网 IP。这个操作通常在路由器 DHCP 静态分配里完成,把服务器网卡 MAC 地址绑定到一个固定地址,例如 192.168.1.20

固定后,家里访问入口就稳定了:

https://192.168.1.20:9443

固定局域网 IP 建议在路由器 DHCP 静态分配里完成,把服务器网卡 MAC 地址绑定到固定地址。

如果你只在家里用,文章到这里已经够用了。把 Portainer 加到浏览器书签,日常看容器、查日志、重启服务都很顺。

但真实场景经常是人不在家:服务突然打不开,家人说影视库访问不了,或者自己想看某个容器是不是挂了。这时直接回家连局域网不现实,开一个按需使用的远程入口就有价值。

7 安装 cpolar:为 Portainer 准备临时远程入口

远程打开管理面板这件事要谨慎。我的建议是:默认只在局域网用 Portainer;人在外面确实要看容器状态时,再短时打开远程入口,用完就关。

cpolar 在这篇里只做一件事:把家用服务器上的 Portainer HTTPS 面板映射成一个公网 HTTPS 地址。它不负责替代 Portainer,也不改变 Docker 管理方式。

Linux 服务器可以使用官方一键安装脚本:

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

安装完成后检查版本和本地 Web 控制台:

cpolar version
curl -s http://127.0.0.1:9200 || echo "cpolar 服务未启动"

cpolar 本地控制台默认是:

http://127.0.0.1:9200

如果服务器没有桌面环境,可以在同一局域网电脑上访问服务器的 9200 端口,或者直接用命令行绑定账号。账号绑定常见有两种方式:能打开 Web UI 时,在控制台登录;纯命令行环境里,在 cpolar 后台复制自己账号的 authtoken 后执行 cpolar authtoken 绑定。这里一定要用后台提供的真实 token,不要把教程里的说明文字当成命令参数。

cpolar 本地控制台默认是 http://127.0.0.1:9200,登录后可以查看隧道状态和账号绑定情况。

8 映射 Portainer 的 9443 管理端口

Portainer 的面板跑在本机 https://localhost:9443。因为它本身是 HTTPS 服务,cpolar 映射时要把本地目标写成带协议的地址:

cpolar http https://localhost:9443

命令启动后,终端会输出公网访问地址。也可以打开 cpolar 本地控制台,在“状态 → 在线隧道列表”里查看公网地址。

cpolar 隧道在线后,控制台会显示公网 HTTPS 地址;也可以直接从命令行输出里复制访问地址。

拿到地址后,在手机流量网络或外部网络环境中打开这个 HTTPS 地址。页面能进入 Portainer 登录页,就说明远程入口打通了。

外部网络能打开 Portainer 登录页,说明远程访问链路已经打通;用完后记得关闭隧道。

如果公网地址打不开,按这个顺序查,不要乱改配置:

  1. 服务器本机能否打开 https://localhost:9443
  2. 局域网电脑能否打开 https://服务器局域网IP:9443
  3. cpolar 本地控制台里隧道是否在线;
  4. 命令里是否写成了 https://localhost:9443,而不是只写 9443
  5. Portainer 容器是否还在运行。

免费随机地址适合短时远程查看,地址会在 24 小时内变化。想长期使用固定二级子域名,需要基础套餐或以上;自定义域名需要专业套餐或以上。本文的推荐仍然是按需打开,不把 Docker 管理面板当成长期公开站点。

9 安全提醒:管理面板别图省事

Portainer 好用,但它是管理入口,不是普通网页。家用服务器里很多服务都挂了数据卷,一次错误操作就会影响真实数据。

安全上至少做到这几条:

  • Portainer 管理员账号使用强密码,别复用论坛、网盘、邮箱密码;
  • 不使用时关闭远程映射,只保留局域网访问;
  • 不开放旧版 9000 HTTP 入口,主线使用 9443
  • 不把 Portainer 管理地址发到群聊、公开文章评论区;
  • 重要容器重启前先看日志和任务状态;
  • 服务器上的 Docker 数据卷定期备份。

关闭临时 cpolar 命令时,直接在运行命令的终端按 Ctrl + C。如果你把 cpolar 做成了后台服务或配置文件隧道,就回到本地控制台停掉对应隧道。

Portainer 这类工具最舒服的用法,是“局域网常用、远程按需”。家里排障时能省很多终端操作,但安全边界不能因为方便就放松。

10 总结

到这里,我们已经把 Portainer CE 跑在家用服务器上,并且用 Docker socket 接入了本机 Docker。局域网里可以直接打开 https://服务器局域网IP:9443 管理容器;人不在局域网里时,也能按需用 cpolar 把 https://localhost:9443 映射出去,临时查看日志或重启服务。

关键步骤就三块:

  • 用 Docker Compose 部署 Portainer CE,保留 9443 管理入口;
  • 首次登录后接入本机 Docker,验证容器列表、日志、重启操作都能正常使用;
  • 远程访问时只映射 Portainer 的 HTTPS 管理端口,用完关闭,并配合强密码和固定局域网 IP。

后面如果家里服务继续增多,可以再把常用容器整理成 Compose 项目,用 Portainer 做日常观察和轻量操作。真正涉及数据迁移、批量删除、数据库维护时,还是回到终端和备份流程里处理。面板负责提效,安全和数据别交给手滑。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐