NAS 折腾日记(3)Portainer 部署与容器管理
创建于 2026-09-15
更新于 2026-09-19
科技
nas
docker
portainer
2614 字 · 约 9 分钟

前言

家里的 Docker 应用迁移到独立 LXC 后,使用 Portainer 管理容器。本文记录安装、初始化、界面部署、持久化和更新操作。

一、部署环境

Docker 已按 NAS 折腾日记(2)PVE 与 Docker 基础环境部署 安装在 Alpine LXC 中。本文统一使用 192.168.20.30 作为 Docker 主机示例地址,命令在该 LXC 内执行。Portainer 通过 socket 管理本机 Docker,自身数据保存到 portainer_data 卷。

二、安装与初始化

在 Docker LXC 中创建 Portainer 数据卷并启动容器:

bash
1
2
3
4
5
6
7
8
9
10
11
12
docker volume create portainer_data docker run -d \ --name portainer \ --restart=always \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:lts docker ps --filter name=portainer docker logs --tail 80 portainer

浏览器访问 https://192.168.20.30:9443,首次使用的是自签名证书。创建管理员账号,进入本地 Docker 环境。如果初始化页面要求 Setup token,从刚才的日志中复制 setup_token= 对应内容。初始化超时可重启 Portainer 后重新打开页面,当前版本的规则见 Setup token 文档

进入环境后,Containers 页面应能看到 Portainer 自身。以后新增应用,通过 Containers → Add container 填写镜像、端口、挂载及环境变量。

三、通过界面创建容器

以一个 nginx 测试容器说明界面操作。进入本地环境,打开 Containers → Add container,填写:

字段 示例
Name web-demo
Image nginx:stable-alpine
Port mapping Host 18080 → Container 80 / TCP
Restart policy Unless stopped

点击 Deploy,访问 http://192.168.20.30:18080 应出现 nginx 欢迎页面。在容器详情中打开 Logs 查看日志,Stats 查看资源使用,Console 选择 /bin/sh 进入容器。

3.1 添加本地持久化目录

在 Docker LXC 准备网页文件:

bash
1
2
mkdir -p /srv/appdata/web-demo printf '%s\n' '<h1>Portainer deployment test</h1>' > /srv/appdata/web-demo/index.html

在 web-demo 详情中点击 Duplicate/Edit,在 Volumes 中选择 Bind,Host 填 /srv/appdata/web-demo,Container 填 /usr/share/nginx/html,启用只读。重新部署并确认替换同名容器后,刷新网页,应显示新内容。

这里 Host 指 Docker daemon 所在的 LXC。浏览器电脑的文件目录需要先传到 LXC,才能作为 bind source 使用。

3.2 更新与重建

先记录现有镜像标签、端口、环境变量和挂载。进入 Duplicate/Edit,设置目标镜像版本,再部署替换。需要拉取同标签的新镜像时,选择重新拉取镜像。完成后检查日志和页面内容,再核对持久化目录。

需要通过文件保存一组服务定义时,可以使用 Stacks → Add stack,将 Compose 内容放入 Web editor。本文日常单容器操作使用 Containers 页面;两种方式都需要保存运行参数与业务数据。

四、Portainer 自身的数据保存

历史部署中遇到过重建后重新出现初始化页面的问题。Portainer 的数据库位于容器 /data,因此重建时必须继续挂载原来的 portainer_data 卷。

bash
1
2
docker inspect --format '{{range .Mounts}}{{println .Type .Name .Destination}}{{end}}' portainer docker volume inspect portainer_data

输出应包含卷名 portainer_data 和目标 /data。应用自己的数据卷与 Portainer 管理数据库分开保存,例如 nginx 的网页目录、FileBrowser 的数据库都有独立位置。

升级 Portainer 前,在其设置页面使用备份功能下载管理数据备份。然后停止旧容器,保留原卷,以目标版本重新创建:

bash
1
2
3
4
5
6
7
8
9
10
docker pull portainer/portainer-ce:lts docker stop portainer docker rm portainer docker run -d \ --name portainer \ --restart=always \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:lts

上例沿用 lts 更新通道;需要指定版本时,将 pull 与 run 中的镜像同时改为目标标签。升级后确认原环境和容器清单可见。业务应用在 Docker 中独立运行,管理界面的替换与业务数据迁移分别处理。

五、连接问题检查

现象 检查位置
浏览器无法打开 docker ps 的端口、LXC 地址、防火墙放行 TCP 9443
初始化超时 重启 Portainer,再读取初始化日志
本地环境不可连接 /var/run/docker.sock 挂载、Docker daemon 状态
重建后进入首次安装 /data 是否仍使用原 volume
应用重建后配置丢失 应用挂载目录及 volume,逐项检查 Mounts

配置文件的网页编辑见 NAS 折腾日记(4)FileBrowser 部署与配置文件权限,实际服务容器示例见 NAS 折腾日记(5)Homepage 部署与服务导航

参考

手机扫码阅读
本文作者: 有次元袋的 tiger
本文链接: https://www.superheaoz.top/2026/09/26827/
版权声明: 本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的个人天地