宿主机目录挂载到docker容器后的访问权限问题
twocode


linux系统的安全性体现在哪里呢?


用户权限就是保障之一!!

用户权限问题,无处不在,不了解权限,在linux上是干不好活的。


本次聊一聊涉及到宿主机目录挂载到docker容器后的访问权限问题

由于器材限制,开发环境使用的是windows+docker tools,所以绑定的目录都是windows,运行一切正常,但是到了测试机centos下,发现目录读写权限问题。


问题描述

docker容器里使用的是:nginx:nginx,于是想当然的将宿主机目录权限也修改为nginx:nginx


分析

可想而知,这都是对系统和docker认识不够深刻的原因。

因为docker中的nginx用户存在于docker容器内的系统数据库里,而不同于宿主机中的nginx用户。


验证一下,可以进入docker容器,手动修改权限
chown -R nginx:nginx /docker/project


退出容器,查看宿主机绑定的目录权限:


ls -al /docker/project
...


看到了吧,宿主机下显示的用户和用户组是什么,

记住这个用户组:用户权限,修改成对应的权限即可,是不是对linux下的用户uid有了更深的认识!!!


上边是手动修改用户组,当然每个问题都会有最有解决方案:


问题出现的本质原因就是两个系统的nginx用户对应uid不同,那么这个就是最佳方案突破口:将宿主机的用户系统复制到docker容器中,这就需要在打包镜像时修改对应的Dockerfile.供参考。


在Dockerfile 中安装了一个 gosu 的工具,并设置了程序的 Entrypoint。由于 Docker 内使用 sudo 可能导致一些不可预知的 TTY 和信号转发问题,所以 Docker 官方推荐了使用 gosu 这个工具,用于保持容器在 root 用户下运行,并用 sudo 来切换到指定用户。


网友评论已关闭