Docker 记一次容器内部修改宿主机挂载目录用户权限后宿主机目录变化
一、需求:
因公司需求,需制作mysql5.7.22 docker基础镜像,每个项目以此镜像启动一个数据库容器,并且每个项目挂载一个宿主机目录到镜像中数据存储下面用于数据持久化保存以便后期迁移至阿里云。
二、遇到问题
将宿主机中相应项目的目录挂载到容器后需要将容器中此目录的用户权限修改为mysql:mysql,但是修改权限后宿主机相应目录权限却由开始的root变成宿主机用户中的hrz。
启动命令如下:
docker run -it -d --name mysql_test -v /Registry/test_mysql/:/application centos:7 /bin/bash
在容器中给予容器/application/mysql3308权限时命令如下:
chown -R mysql:mysql /application/mysql3308
三、根因
经过接近一天的时间,终于发现根因如下。
1、其实在操作系统中,真正决定用户和用户组的东西并不是用户名和组名,而是相应的用户id 和 对应的组id,当我们刚创建用户时系统就会给用户分配对应的用户id 和 组id,默认创建的用户和组id会从1000开始分配,可以在/etc/passwd中查看,如下图

2、在遇到的问题描述中,因为容器中只创建了一个mysql用户和组,因此容器中查看到mysql用户id和组id为1000:1000,因此给/application/mysql3306目录用户权限时其实是给予的用户id和组id为1000:1000权限,因此,在宿主机中mysql3306此目录的用户权限也变为1000:1000,因为宿主机中此用户id和组id为hrz,因此就显示为hrz,就算宿主机中也创建一mysql账户如果用户id 和 组id 不为1000那么此目录任然会是hrz。
3、但是要启动mysql服务那么此目录又必须在容器和宿主机中都为mysql用户(具体原因为mysql配置文件中指定用户为mysql),因此,解决方法为修改基础镜像中用户mysql的用户id和组id 与 宿主机中mysql的用户id 与 组 id 一致即可。
Docker 记一次容器内部修改宿主机挂载目录用户权限后宿主机目录变化的更多相关文章
- Jenkins(4)docker容器内部修改jenkins容器时间
前言 用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间 查看时间 查看系统时间 date-R 进入docker容器内部,查看容器时间 docker e ...
- Docker --rm 自动清理容器内部临时文件
在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据. 清除断掉链接的容器缓存
- docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用
一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...
- 批量修改文件夹及文件用户权限和用户组权限 centos
chown -R www * 批量修改目录下所有文件,用户为www chown -R :www * 批量修改目录下所有文件,用户组为www
- Docker搭建tomcat运行环境(修改镜像方式)
对于java程序员来说,要想使用Docker来部署你的应用,那么在镜像中安装类似于tomcat的容器基本上是必须的(sprintboot项目除外),本篇介绍自己基于对centos镜像的修改,创建自己的 ...
- docker挂载volume的用户权限问题,理解docker容器的uid
docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...
- mac 修改用户权限
想安装thinkPHP 下载完以后 访问报403错误 于是百度找 也没找到原因 自己猜测是不是用户权限问题 就是下面目录为tp的用户权限 不是root 其他是root的都能访问 于是百度搜了权限如何修 ...
- 如何修改linux 用户登录后默认目录
1.linux用户登录后默认目录是在/etc/passwd文件设置的.如下图所示,一共显示了四行数据,其中第一行的/root即为root用户登录后的默认目录,第二行daemon用户的默认目录是/usr ...
- Docker容器内部端口映射到外部宿主机端口的方法小结
转自:https://www.cnblogs.com/kevingrace/p/9453987.html Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以 ...
随机推荐
- ubuntu上zip格式解压乱码解决
在windows上压缩的文件,是以系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 虽然2005年就有人把这报告为bu ...
- @ImportResource 导入Spring 的xml配置文件
在配置类尚标注此注解,等同于spring配置文件中的 <import resource="beans.xml"/> Spring Boot里面没有Spring的配置文件 ...
- slice() 和splice()
splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改. 1, splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. splice ...
- 【BZOJ4826】【HNOI2017】影魔(扫描线,单调栈)
[BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他 ...
- 第16月第23天 atos
1. grep --after-context=2 "Binary Images:" *crash xcrun atos -o zhiniao_adhoc_stg1.app.dSY ...
- mysql 原理 ~ sql执行
一 普通sql执行的具体过程1 连接器 管理连接,权限验证2 分析器 词法分析,语法分析 比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等3 优化器检测 执行计划生 ...
- Web项目Shiro总结及源码(十六)
shiro过虑器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shir ...
- Shiro的三种授权(十二)
前提就是在Realm的授权方法中查询出权限并返回List<String>形式 @Override protected AuthorizationInfo doGetAuthorizatio ...
- OpenWrt启动过程分析+添加自启动脚本【转】
一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...
- oracle 各个版本下载地址
Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP http://downl ...