本文详细介绍了Docker创建容器时的目录权限践踏。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值。有必要的朋友陪我去了解一下。
昨天写新项目,要用Mysql的衍生版本号percona,所以想让Doker安装。结果踩了一晚上坑,今天早上终于处理好了。现在记录在这里。
这个坑是我对linux的目录权限问题不敏感造成的。我的系统是ubuntu16.04,运行dockerpullpercona获取镜像系统时一切正常。[/br]
获取后输入dockerimages查询所有镜像系统,显示的信息都是对的:
然后,我按照以下说明创建了容器:
这个命令意味着我创建一个名为percona的容器,然后将我的local/data/mysql-data目录投影到docker容器中的/var/lib/mysql目录并指定端口号3306,然后建立一个数据库查询root客户的登录密码也是root,最后的percona:latest就是我上面得到的版本号。
由于docker容器中的数据库查询只是一个镜像系统,可以知道它并不真正存在。投影到我的本地目录的效果是docker保存在/var/lib/mysql目录下的所有数据信息都可以保存在我的本地/data/mysql-data目录下。这样既保证了数据信息不丢失,又方便了我的本地实际 *** 作。
如果不知道指令的主要参数,可以看官网文本文档或者随意搜索docker教程视频,都有表述。然后我打开这个容器,docker开始percona。打开后,我检查了所有正在运行的容器dockerps,现在出现了一个问题:
对于空,也就是说,没有找到工作容器...然后我搜查了所有的集装箱,包括工作的和非工作的。dockerps-a,并显示以下信息:
原来端口号没有关联成功,所以没用!,它将在每次运行时自动存在
此时,我查询检查了docker日志,键入指令docker日志容器id,显示了以下信息:
注:71这里是我的容器的container_id的前两个数据。docker适合这种简写。
日志显示没有权限创建和写入容器中的/var/lib/mysql目录。
现在正在找这个问题的原因,但是找了一晚上也没有处理,所以不得不承认网上一些逃避责任的水贴确实是坑!
终于在早上找到了解决方案:
那就是检查我本地目录的用户和docker容器中/var/lib/mysql目录的用户是否是同一个客户。
该命令的作用是查询容器的用户,显示信息为:
然后键入(无自动换行):
该指令的作用是在计划本地数据信息量时查询该目录的所有者
这就是为什么mysql的客户在浏览docker中的目录时会报告不正确的权限!因为本地投影目录的所有者是root客户,docker容器中/var/lib/mysql目录的所有者是mysql客户,所以uid是999!
那么解决方案就是给uid999,mysql客户,当前目录的所有者,然后重启容器
问题解决了!花了整整一个晚上,不得不承认linux在权限 *** 控方面的特长要加重了!
关于Docker创建容器的权限的这篇文章到此为止。关于Docker创建容器目录权限的大量信息,请搜索您以前的文章或再次访问下面的相关文章。期待你以后的申请!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)