创建容器时目录权限踩坑

创建容器时目录权限踩坑,第1张

Docker创建容器时目录权限踩坑

本文详细介绍了Docker创建容器时的目录权限践踏。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值。有必要的朋友陪我去了解一下。

昨天写新项目,要用Mysql的衍生版本号percona,所以想让Doker安装。结果踩了一晚上坑,今天早上终于处理好了。现在记录在这里。
这个坑是我对linux的目录权限问题不敏感造成的。我的系统是ubuntu16.04,运行dockerpullpercona获取镜像系统时一切正常。[/br]


获取后输入dockerimages查询所有镜像系统,显示的信息都是对的:

然后,我按照以下说明创建了容器:

dockercreate--namepercona-v/data/mysql-data:/var/lib/mysql-p3306:3306-eMYSQL_ROOT_PASSWORD=rootpercona:lates

这个命令意味着我创建一个名为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目录的用户是否是同一个客户。

dockerrun-ti--rm--entrypoint="/bin/bash"percona-c"whoami&&id"

该命令的作用是查询容器的用户,显示信息为:


然后键入(无自动换行):

dockerrun-ti--rm-v/data/mysql-data:/var/lib/mysql--entrypoint="/bin/bash"percona-c"ls-la/var/lib/mysql"

该指令的作用是在计划本地数据信息量时查询该目录的所有者


这就是为什么mysql的客户在浏览docker中的目录时会报告不正确的权限!因为本地投影目录的所有者是root客户,docker容器中/var/lib/mysql目录的所有者是mysql客户,所以uid是999!
那么解决方案就是给uid999,mysql客户,当前目录的所有者,然后重启容器

问题解决了!花了整整一个晚上,不得不承认linux在权限 *** 控方面的特长要加重了!

关于Docker创建容器的权限的这篇文章到此为止。关于Docker创建容器目录权限的大量信息,请搜索您以前的文章或再次访问下面的相关文章。期待你以后的申请!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存