我正在尝试通过以下方式运行 docker 镜像
docker run -it -v $PWD/examples:/home/user/examples image
这应该使主机中的
$PWD/examples
可以在容器中访问。但是,当我在容器中使用 ls
时,它不断给我ls: cannot access 'examples': Permission denied
我已经尝试过类似问题的答案,
z/Z
选项和 chcon -Rt svirt_sandbox_file_t /host/path/
和 run --privileged
,但在我的情况下,它们都没有任何影响。事实上,
z
选项似乎第一次工作 ls
,但是当我第二次发出 ls
时它再次被拒绝。 最佳答案
在评论中发现图像的 USER
中可能有一条 Dockerfile
指令。由于 examples
的文件访问权限,不允许该用户访问 examples
。
可以使用 docker run 选项 USER
取代 --user
。
一个快速而肮脏的解决方案是使用 --user=root
运行以允许任意访问。
请注意,在容器中以 root
形式写入文件夹 examples
的文件将由 root
拥有。
更好的解决方案是寻找 examples
的所有者,称他为 foo
。指定其用户 id 和组 id 以在容器中具有完全相同的用户:
docker run --user $(id -u foo):$(id -g foo) imagename
另一种可能的解决方案是允许使用
chmod 666 examples
或 chmod 644 examples
进行任意访问,但很可能您不想要那样。最好的方法是查看 Dockerfile 并检查
USER
指令的用途。--user=foo
或更准确地说 --user=$(id -u foo):$(id -g foo)
。 USER
,那么最好更改 examples
的访问权限。 examples
的所有者。 关于linux - 容器中的 Docker "permission denied",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51596279/