我的计算机上运行了一些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
所以我有两个问题
我最近开始使用docker。请解决不成熟的问题。在此先感谢:)
答案 0 :(得分:5)
Docker以linux用户身份运行命令,该用户绑定了linux文件系统权限。所以这个问题的答案取决于:
您正在运行命令的uid(默认为root,但可以在Dockerfile中使用USER
命令覆盖图像,或者docker run
cli或内部覆盖你的docker-compose.yml文件)。
您使用相对路径后运行命令的位置。这将默认为/
,但可以通过以各种方式更改工作目录再次覆盖,通常使用Dockerfile中的WORKDIR
。
该位置的目录和文件权限。
在容器内使用ls -al
查看当前权限。使用id
查看当前的uid。使用docker exec
,您可以传递一个标志来更改当前用户。要更改权限,您可以使用chmod
自行更改权限,chown
更改用户所有权,chgrp
更改群组所有权。 e.g:
docker exec -u root container_1 chmod 777 .
该命令允许任何用户通过以root用户身份运行来读取或写入容器内的当前文件夹。
这假设您未使用SE Linux或AppArmor启用任何其他安全性。