Docker容器写权限

时间:2017-02-13 22:07:09

标签: docker

我的计算机上运行了一些docker容器,其中一个是container_1

我可以使用

访问container_1的cli
ant@ant~/D/m/l/db> docker exec -it container_1 bash
daemon@1997cc093b24:/$

这允许我转到container_1的cli但没有写入权限。以下命令提供权限被拒绝错误

ant@ant~/D/m/l/db> docker exec -it container_1 touch test.txt
bash: test.txt: Permission denied
ant@ant~/D/m/l/db>docker exec -it container_1 bash
daemon@1997cc093b24:/$ touch test.txt
bash: test.txt: Permission denied

还尝试使用--previleged选项,但问题仍然存在

ant@ant~/D/m/l/db> docker --previleged=true exec -it container_1 touch test.txt
bash: test.txt: Permission denied

所以我有两个问题

  1. docker中的权限如何工作?
  2. 是否建议对docker文件系统进行此类修改?如果不是为什么?
  3. 我最近开始使用docker。请解决不成熟的问题。在此先感谢:)

1 个答案:

答案 0 :(得分:5)

Docker以linux用户身份运行命令,该用户绑定了linux文件系统权限。所以这个问题的答案取决于:

  1. 您正在运行命令的uid(默认为root,但可以在Dockerfile中使用USER命令覆盖图像,或者docker run cli或内部覆盖你的docker-compose.yml文件)。

  2. 您使用相对路径后运行命令的位置。这将默认为/,但可以通过以各种方式更改工作目录再次覆盖,通常使用Dockerfile中的WORKDIR

  3. 该位置的目录和文件权限。

  4. 在容器内使用ls -al查看当前权限。使用id查看当前的uid。使用docker exec,您可以传递一个标志来更改当前用户。要更改权限,您可以使用chmod自行更改权限,chown更改用户所有权,chgrp更改群组所有权。 e.g:

    docker exec -u root container_1 chmod 777 .
    

    该命令允许任何用户通过以root用户身份运行来读取或写入容器内的当前文件夹。

    这假设您未使用SE Linux或AppArmor启用任何其他安全性。