前言
家里的 Docker 应用迁移到独立 LXC 后,使用 Portainer 管理容器。本文记录安装、初始化、界面部署、持久化和更新操作。
一、部署环境
Docker 已按 NAS 折腾日记(2)PVE 与 Docker 基础环境部署 安装在 Alpine LXC 中。本文统一使用 192.168.20.30 作为 Docker 主机示例地址,命令在该 LXC 内执行。Portainer 通过 socket 管理本机 Docker,自身数据保存到 portainer_data 卷。
二、安装与初始化
在 Docker LXC 中创建 Portainer 数据卷并启动容器:
bash123456789101112docker 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 准备网页文件:
bash12mkdir -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 卷。
bash12docker inspect --format '{{range .Mounts}}{{println .Type .Name .Destination}}{{end}}' portainer docker volume inspect portainer_data
输出应包含卷名 portainer_data 和目标 /data。应用自己的数据卷与 Portainer 管理数据库分开保存,例如 nginx 的网页目录、FileBrowser 的数据库都有独立位置。
升级 Portainer 前,在其设置页面使用备份功能下载管理数据备份。然后停止旧容器,保留原卷,以目标版本重新创建:
bash12345678910docker 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 部署与服务导航。
参考
支付宝
微信