前言

之前在绿联NAS安装1Panel,强化你的NAS!这篇文章中,使用Docker部署了1Panel。

但是在使用过程中出现了一个让我很头疼的问题,就是NAS重启(其实应该算到容器重启的头上),有时候断电,或者NAS系统升级重启后,我的1Panel容器也会随着重启。

容器本就应该重启没问题,但是1Panel面板出故障了,每次1Panel容器一重启,进入1Panel Web面板就会卡在刷新(没了解具体原因),在容器终端输入1pctl restart all就能解决。

但是我无法知晓我的容器在什么时候重启了,并且,就算我能知道,每次重启我都要到终端执行一下这个命令也太麻烦了,这里记录下如何解决这样的问题。

开始前的说明

我的1Panel容器是基于docker.io/koryking/1panel:latest这个镜像构建,这个容器默认不支持1pctl指令。

通过绿联NAS安装1Panel,强化你的NAS!的步骤后,我的的1Panel镜像,在终端能够执行下面的指令了(1Panel命令行工具确保你的容器也能够执行

1
2
# 重启1Panel面板
1pctl restart all

正常来讲,执行了这个指令,1Panel Web面板就能够正常使用了,但是我们想要容器在启动的时候就执行这个指令还需要有点儿操作。

导出镜像

docker.io/koryking/1panel:latest这个镜像默认目前是不带1pctl命令的,1pctl是在我们对容器进行一些操作后才支持的命令,所以我们需要重新从一个支持1pctl的镜像构建容器。

使用下面的命令直接将1Panel容器提交为镜像(我这里导出的镜像名为insectmk/1panel):

1
2
3
4
5
# 提交当前容器为新的镜像,我的容器名是1panel,提交的镜像名可以自定义
docker commit <容器名或ID> my-new-image

# 例如
docker commit 1panel insectmk/1panel

Docker-Compose

停掉Compose

停掉之前的Docker-Compose,如果是绿联云NAS的Docker项目部署的,直接在Docker->项目中操作就行。

停止项目,然后再删除项目就行。

如果是普通终端管理Docker,进入到docker-compose.yml所在的目录,执行以下命令就行:

1
2
3
4
# 停掉容器
sudo docker compose -f docker-compose.yml stop
# 删除容器,默认是1panel,根据实际情况修改参数
sudo docker rm 1panel

编辑Compose

编辑docker-compose.yml,替换为新的镜像,并写入command配置以在容器启动时自动执行指令(环境变量这里没改过,但是可能是失效的,用的是之前构建镜像时的配置。PS:猜想,可以自己试试):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
services:
1panel:
container_name: 1panel # 容器名
image: insectmk/1panel # 刚提交的镜像名
restart: always
network_mode: "host"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- ./opt:/opt # 文件存储映射
- ./root:/root # 可选的文件存储映射
environment:
- TZ=Asia/Shanghai # 时区设置
- PANEL_BASE_DIR=/opt
- PANEL_PORT=3000 #WEB访问端口
- PANEL_ENTRANCE=makuning #入口令牌(网页登录使用,如:http://NAS的IP:端口号/入口令牌 )
- PANEL_USERNAME=InsectMk #登录用户
- PANEL_PASSWORD=_Mk20010624 #用户密码,建议设置复杂密码
command: >
sh -c "
echo '开始执行1pctl命令...' &&
which 1pctl &&
1pctl restart all &&
echo '命令执行完成' &&
tail -f /dev/null"
labels:
createdBy: "Apps"

启动Compose

如果是绿联NAS,进入Docker->项目->创建,选择之前1Panel目录,提示该路径已存在Compose配置,请重新选择路径或**导入该配置**,点击导入该配置,点击立即部署

如果是普通终端管理Docker,进入到docker-compose.yml所在的目录,执行以下命令就行:

1
2
# 重启编排
sudo docker compose -f docker-compose.yml up

验证

1Panel容器启动成功后,看看是否可以正常访问,可以正常访问后再重启容器访问试试。