zoukankan      html  css  js  c++  java
  • Docker 容器内部修改宿主机挂载目录用户权限后宿主机目录变化

    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 一致即可。 

  • 相关阅读:
    JQ选择器
    设计模式
    招银网络面试
    斗鱼面经
    招银科技面经
    用户访问网站基本流程
    shell的条件判断
    crontab -e 和/etc/crontab的区别
    秘钥对登录配置
    CentOS6 x86_64最小化安装优化脚本
  • 原文地址:https://www.cnblogs.com/mfryf/p/13344743.html
Copyright © 2011-2022 走看看