QNAP Container Station多Docker容器触发Permission Denied错误求助
QNAP TS-453a NAS多容器Permission Denied问题解决
问题情况
家里的QNAP TS-453a NAS上,Container Station里的20个容器突然集体报权限错误,基本都卡在docker-entrypoint环节:
- postgres容器返回
error: exec failed: permission denied - node-red容器返回
exec ./entrypoint.sh: permission denied
之前为了维护,把/var/run/docker.sock共享给了HomeAssistant、WatchTower和Portainer三个容器。
已经试过的操作
- 完全重建容器
- 检查共享卷的权限设置
- 重装Container Station和Docker
- 重启NAS
- 执行
sudo chmod 666 /var/run/docker.sock
解决步骤
1. 核对docker.sock的组权限
QNAP里docker进程的所属组一般是docker,docker.sock默认只有该组和admin用户有读写权限。先查一下当前权限:
ls -l /var/run/docker.sock
正常输出应该是srw-rw---- 1 admin docker 0 ... /var/run/docker.sock。如果之前改了666权限,虽然临时能用,但不安全,得改回正确的组权限配置。
2. 给容器映射docker组GID
那些需要访问docker.sock的容器(HomeAssistant、WatchTower、Portainer),得让容器内的用户属于宿主机的docker组:
- 先拿宿主机docker组的GID:
getent group docker | cut -d: -f3
- 启动容器时加上
--group-add <刚才拿到的GID>参数,比如Portainer的启动命令:
docker run -d -p 9000:9000 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /share/Container/portainer/data:/data \ --group-add 100 \ portainer/portainer-ce
(这里的100是示例GID,实际用你查到的数值)
3. 修复容器entrypoint脚本权限
有些镜像的entrypoint脚本可能因为共享卷的权限继承问题丢了执行权限,可这么处理:
- 如果能临时启动容器的shell:
docker run -it --entrypoint sh <镜像名称>
- 给脚本加执行权限:
chmod +x ./entrypoint.sh
- 要是连shell都进不去,直接换官方最新版镜像,或者把镜像导出修改后再导入。
4. 重置QNAP共享文件夹权限
QNAP的ACL权限偶尔会乱,特别是更新系统后。去Web管理台的控制面板 > 权限设置 > 共享文件夹,找到容器数据存的共享文件夹,重新设置权限,确保admin用户或docker组有读写执行的权限。也可以用命令行修复:
sudo set_volume_permission <你的共享文件夹名>
5. 检查安全模块限制
部分QNAP版本开了SELinux或AppArmor,会限制容器执行脚本。可以临时关了测试:
sudo setenforce 0
如果问题解决了,要么配置安全规则允许容器操作,要么根据自己的安全需求决定是否保持关闭。
内容的提问来源于stack exchange,提问作者Bram Kelchtermans
相关产品推荐
相关产品推荐

