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 examples
或 chmod 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
我正在尝试 运行 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 examples
或 chmod 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