Ubuntu环境下运行Docker容器出现/vol/web/static权限被拒绝报错
根因排查
- 你创建的
user用户本身配置是正确的:adduser --disabled-password user命令执行时,Ubuntu会自动创建同名的user用户组,chown -R user:user /vol的属主配置不存在语法错误。 - 最常见的出错场景是运行容器时挂载了外部卷到
/vol路径:Dockerfile中执行的chown仅作用于镜像内置的目录,对挂载的宿主机目录、匿名/命名卷无效,挂载目录的权限继承宿主端的权限配置,就会出现容器内用户无访问权限的问题。 - 次常见原因是构建镜像时使用了旧缓存,
chown修改权限的步骤未实际执行,镜像内的/vol目录属主仍然是root。 - 小概率是
entrypoint.sh运行时动态创建了/vol/web/static下的子目录,未主动分配权限给user用户。
可落地解决方案
- 优先排除缓存问题,执行无缓存构建:
docker build --no-cache -t <你的镜像名> .
- 如果确认容器运行时挂载了外部目录到
/vol,选择以下任一方案处理:
- 宿主机端修改权限:先进入容器执行
id user查看用户的UID、GID(默认Ubuntu新建普通用户UID/GID均为1000),在宿主机执行命令修改挂载目录权限:
sudo chown -R <查得的UID>:<查得的GID> <宿主机上的挂载目录路径>
- 启动时动态修改权限:修改Dockerfile删除
USER user配置,在entrypoint.sh开头添加权限修改逻辑,完成后切换到user用户执行业务进程:
#!/bin/sh # 修正目录权限 chown -R user:user /vol chmod -R 755 /vol/web # 切换用户执行后续命令,替换为你实际的启动命令 exec su - user -c "python3 app.py"
- 如果是
entrypoint.sh动态创建子目录导致的问题,在创建目录的逻辑后添加对应chown命令即可。
内容的提问来源于stack exchange,提问作者swamper
相关产品推荐
相关产品推荐

