Ubuntu 22.04下Docker local-persist插件作为systemd服务使用遇问题
我正为包含数十个服务(约35个卷)的大型应用创建持久化Docker卷,在Docker官网的「Use Docker Engine Plugins page」发现了local-persist插件。我按照作者README中的说明将其安装为systemd服务,执行命令:
curl -fsSL https://raw.githubusercontent.com/CWSpear/local-persist/master/scripts/install.sh | sudo bash
每个节点上的服务已安装并正常运行:
$ systemctl | grep pers docker-volume-local-persist.service loaded active running docker-volume-local-persist $
但当我在docker-compose文件中按照作者示例使用该插件时:
volumes: cache-perstnt-1-data: driver: local-persist driver_opts: mountpoint: /data/cache-perstnt-1-data
Docker却无法找到该插件。请问还需进行什么操作才能让Docker识别作为systemd服务运行的该插件?
确认插件套接字路径配置
Docker默认扫描/run/docker/plugins目录识别插件。先检查该目录下是否存在local-persist.sock文件:ls -l /run/docker/plugins/如果没有这个文件,打开systemd服务配置文件(一般在
/etc/systemd/system/docker-volume-local-persist.service),在[Service]段修改或添加启动参数,指定套接字路径:ExecStart=/usr/bin/docker-volume-local-persist -socket /run/docker/plugins/local-persist.sock重新加载systemd并重启服务:
sudo systemctl daemon-reload sudo systemctl restart docker-volume-local-persist.service手动注册插件到Docker
若套接字存在但Docker未识别,在/etc/docker/plugins/目录下创建local-persist.json配置文件,内容如下:{ "Name": "local-persist", "Addr": "unix:///run/docker/plugins/local-persist.sock" }保存后重启Docker服务:
sudo systemctl restart docker.service验证插件状态
执行以下命令查看Docker已加载的卷插件:docker plugin ls若输出中出现
local-persist,说明配置生效,此时再运行docker-compose即可正常使用该卷驱动。排查权限与安全策略问题
检查套接字文件权限,确保Docker进程所属的docker用户组有读写权限:sudo chown root:docker /run/docker/plugins/local-persist.sock sudo chmod 660 /run/docker/plugins/local-persist.sock若系统启用了SELinux或AppArmor,需调整对应策略允许Docker访问该套接字,或临时关闭测试(生产环境不推荐)。
内容的提问来源于stack exchange,提问作者Kim

