Docker容器启动时报错:无法挂载卷,权限被拒绝?

程序猿一可 阅读 35

我在用Docker运行一个Node.js容器时,执行docker run命令挂载了本地项目目录,但总是报错”permission denied”,提示无法挂载卷。折腾了半天没解决:

具体命令是这样写的:


docker run -v /home/user/project:/app -p 3000:3000 my-node-app

然后就出现这个错误:


docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting storage: permission denied mounting storage: permission denied: unknown.

已经检查过目录权限,用chmod 777 project也试过,甚至加了sudo还是不行,这是哪里出问题了?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
设计师春荣
这个问题八成是SELinux或者AppArmor这类安全模块搞的鬼,尤其是你在CentOS、Fedora这种系统上。Linux发行版默认开启SELinux后,会限制容器对挂载卷的访问,哪怕你chmod 777也没用。

复制这个命令试试:

docker run -v /home/user/project:/app:Z -p 3000:3000 my-node-app

关键就在后面的 :Z,它告诉Docker这个卷只给这个容器用,自动处理SELinux上下文标签。如果是共享给多个容器,就用 :z(小写),表示可共享。

如果还是不行,再检查下是不是用了rootless模式但权限没配好。你可以临时关SELinux测试一下:

setenforce 0

然后再跑原命令。如果这下能启动,那就确认是SELinux问题,记得事后改回 setenforce 1

另外,别用sudo跑docker,那不是正道。把用户加进docker组才是长久之计:

sudo usermod -aG docker $USER

登出再登录生效。

总之先加 :Z,90%的情况都能解决。
点赞 3
2026-02-09 15:06
司空紫萱
问题出在挂载的目录上,可能是目录被SELinux或AppArmor限制了。先试试加个参数:--security-opt apparmor:unconfined。如果还是不行,检查一下宿主机的SELinux设置,临时关掉SELinux试试:setenforce 0

docker run --security-opt apparmor:unconfined -v /home/user/project:/app -p 3000:3000 my-node-app


折腾太久就容易忽略这些系统层面的东西,搞定收工!
点赞 8
2026-02-02 19:04