群晖的Docker套件分为:Docker worker和Docker Project Worker两种,区别是:
Docker worker支持DSM7.0-7.2,通过在conf/resource按照格式编辑后,安装过程会自动转换为docker-compose.yaml,且支持wizard变量,还支持自动在docker共享文件夹目录自动建立映射的文件夹,缺点:卸载套件会自动删除docker里面建立的文件夹。。。
举例套件:lobechat和百度网盘DSM7.1,均未使用"shares"自动文件夹
Docker Project Worker只支持DSM7.2,安装过程直接运行套件里面的docker-compose.yaml,支持建立复杂的项目,缺点:无法传递wizard变量到docker-compose.yaml
举例套件:百度网盘DSM7.2和qinglong、portainer-ce等等
本文主要讨论ContainerManager 20和24 的一些变化,以及Docker类套件在24不能正常运行的原因:
(最新Docker都27了。。。)
1、/var/packages/ContainerManager/target/tool/docker_inspect权限变化
20里面docker_inspect权限是4755,套件可以获取到容器的状态。
24里面docker_inspect权限是0755只能root权限获取docker状态。
但!!!官方示例Compile Docker Package - Gitlab里面是用docker_inspect的。。。而且也没有其它方法获取
DOCKER_INSPECT="/usr/local/bin/docker_inspect"
status)
"$DOCKER_INSPECT" "$GITLAB_NAME" | grep -q "\"Status\": \"running\"," || exit 1
目前的解决方法是。。。改权限
sudo chmod 4755 /usr/local/bin/docker_inspect
2、容器建立时的默认用户变化
ContainerManager20是使用容器预设的用户一般root,ContainerManager24则采用套件的用户,导致会出现容器初始化权限问题,如下图没有权限在容器内mkdir(容器内的初始化,非映射的文件夹)
目前的解决方法是在docker-compose.yaml内增加:user: root
3、其它的一些变化
ContainerManager24 中 Docker worker项目会保存转化后的docker-compose.yaml到var目录,Docker Project Worker项目会优化?.yaml保存为docker-compose.admin.yaml(我估计是为以后支持变量准备的?)
4、最难受的一点。。。
群晖的docker compose up不支持自动建立文件夹,必须是已存在的,1panle套件胎死腹中。。。
5、提供两个Docker套件样板供分析
已删除版本限制:install_dep_packages="ContainerManager>=20.10.23-1432:ContainerManager<24.0.2-1520"
Docker worker
docker_lobechat_v1.0_DSM7.2.spk,去除DSM版本限制也支持DSM7.0、7.1
Docker Project Worker
docker_qinglong_v1.0_DSM7.2.spk