【问题标题】:Docker "permission denied" in container容器中的 Docker“权限被拒绝”
【发布时间】:2019-01-06 20:10:31
【问题描述】:

我正在尝试运行一个 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?您可以使用--user=root 进行测试以取代可能的USER
  • @BrunoGL 这是一些软件的官方预建镜像..
  • @mviereck 谢谢,这似乎有效!有没有办法解决它而不是解决方法?

标签: linux docker permissions containers virtualization


【解决方案1】:

在 cmets 中发现图像的 Dockerfile 中可能有一条 USER 指令。由于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 指令的用途。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 2018-10-31
      • 2018-12-15
      • 2023-03-22
      • 2021-07-30
      • 2017-01-22
      • 2020-11-02
      • 2020-09-10
      相关资源
      最近更新 更多