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

时间:2018-07-30 14:28:17

标签: linux docker permissions containers virtualization

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

2 个答案:

答案 0 :(得分:0)

在评论中,发现图像的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 exampleschmod 644 examples进行仲裁访问,但很可能您不希望这样做。


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

  • 如果仅出于避免在容器中扎根的目的,最好的方法是使用--user=foo或更准确地使用--user=$(id -u foo):$(id -g foo)
  • 如果Dockerfile / image中的某些内容依赖于特定的USER,则最好更改examples的访问权限。
  • 如果您有权访问Dockerfile,则可以对其进行调整以适合您的主机用户/ examples的所有者。

答案 1 :(得分:0)

尝试以特权身份运行容器:

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

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