容器中的Docker“权限被拒绝”

pp3*_*377 3 linux permissions virtualization containers docker

我正在尝试通过以下方式运行 docker 映像

docker run  -it -v $PWD/examples:/home/user/examples image 
Run Code Online (Sandbox Code Playgroud)

这应该使$PWD/examples主机可以在容器中访问。但是,当我ls在容器中时,它不断给我

ls: cannot access 'examples': Permission denied
Run Code Online (Sandbox Code Playgroud)

我已经尝试了类似问题的答案,z/Z选项和chcon -Rt svirt_sandbox_file_t /host/path/run --privileged,但在我的情况下它们都没有任何影响。事实上,该z选项似乎第一次有效ls,但当我ls第二次发出时,它再次被拒绝。

mvi*_*eck 5

在评论中,结果表明图像中可能有USER说明Dockerfileexamples由于 的文件访问权限,不允许此用户访问examples


可以USER用 docker run option取代--user

一个快速而肮脏的解决方案是运行--user=root以允许任意访问。请注意,root在容器中写入文件夹的文件examples将归root.

更好的办法是找主人examples,给他打电话foo。指定其用户 id 和组 id 以在容器中具有完全相同的用户:

docker run --user $(id -u foo):$(id -g foo)  imagename
Run Code Online (Sandbox Code Playgroud)

另一种可能的解决方案是允许使用chmod 666 examples或进行任意访问chmod 644 examples,但很可能您不想要那样。


最好的方法是查看 Dockerfile 并检查USER指令的目的。

  • 如果它只是为了避免容器中的root,最好的方法是使用--user=foo或更准确地说--user=$(id -u foo):$(id -g foo)
  • 如果 Dockerfile/image 中的某些内容依赖于特定的USER,则最好更改examples.
  • 如果您有权访问 Dockerfile,您可以调整它以适合您的主机用户/ examples.