Docker "permission denied" 在容器中

Docker "permission denied" in container

我正在尝试 运行 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 时,它再次被拒绝。

在评论中发现图像的Dockerfile中可能有一个USER指令。由于 examples.

的文件访问权限,此用户无权访问 examples

可以用 docker 运行 选项 --user 取代 USER

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

所有

更好的解决办法是寻找examples的所有者,称他为foo。指定其用户id和组id在容器中拥有完全相同的用户:

docker run --user $(id -u foo):$(id -g foo)  imagename

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


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

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

尝试运行容器作为特权:

sudo docker run --privileged=true -itd -v /***/***:/***  ubuntu bash

for example: sudo docker run --privileged=true -itd -v /home/willie:/wille ubuntu bash