Docker容器启动时报错:无法挂载卷,权限被拒绝?
我在用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还是不行,这是哪里出问题了?
复制这个命令试试:
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%的情况都能解决。--security-opt apparmor:unconfined。如果还是不行,检查一下宿主机的SELinux设置,临时关掉SELinux试试:setenforce 0。折腾太久就容易忽略这些系统层面的东西,搞定收工!