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文件系统进行了这种修改? 如果不是为什么?

我最近开始使用docker。 请处理这个问题。 提前致谢 :)

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

  1. 你正在运行的命令为(默认为root,但可以在Dockerfile,Docker docker run cli或docker-compose.yml文件中使用USER命令在你的映像中重写)。

  2. 自从使用相对path以来,命令运行的位置。 这将默认为/ ,但可以通过以各种方式更改工作目录来重写,通常使用Dockerfile中的WORKDIR

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

在容器中使用ls -al来查看当前的权限。 使用id来查看当前的uid。 用docker exec你可以通过一个标志来改变当前用户。 而要更改权限,可以使用chmod自己更改权限, chown更改用户所有权, chgrp更改组所有权。 例如:

 docker exec -u root container_1 chmod 777 . 

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

这假定您没有启用SE Linux或AppArmor的其他安全性。