Docker创建容器时目录权限踩坑
作者:清浅 发布时间:2021-10-28 23:33:14
昨天写项目时需要用到Mysql的衍生版本percona, 就想用Doker来安装.结果踩了一晚上坑, 今早终于解决. 现记录在此.
这个坑原因是我对linux的目录权限问题不敏感导致的. 我的系统是ubuntu16.04, 运行 docker pull percona 拉取镜像时一切正常.
拉取完后,输入 docker images查看所有镜像, 显示正常:
然后我创建容器,命令为(执行时不要有换行):
docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:lates
这个命令的意思是我创建一个名为percona的容器, 然后把我本地的/data/mysql-data目录映射到docker容器中的/var/lib/mysql目录 并指定3306端口,然后设数据库root用户密码也为root,最后的percona:latest是指定我上面拉取的版本.
因为docker容器中的数据库只是一个镜像,可以理解为并不是真实存在的,映射到我本地目录的作用就是docker往/var/lib/mysql目录存储的数据都可以同步存储到我的本地/data/mysql-data目录. 这样保证了数据不丢失,而且方便我本地操作.
命令的参数不了解的可以看下官方文档或者随便搜个docker视频教程, 都有解释. 然后我开启此容器, docker start percona. 开启完后查询所有运行中的容器docker ps, 这时候出问题了:
为空,即没有查到运行中的容器... 然后我查了下所有的容器,包括运行的和没运行的的. docker ps -a, 显示如下:
原来是端口没有绑定成功, 所以没有运行!, 每次运行就自动exited
这时我查看了一下docker日志, 输入命令 docker logs 容器id, 显示如下:
注: 这里的71是我此容器的container_id的开头前两个数字, docker支持这种简化写法.
日志报错说我没有对容器中/var/lib/mysql目录下的创建和写权限.
现在找到这个问题原因了, 可是搜了一晚上都没有解决, 不得不说网上的一些不负责任的水贴是真的坑!
终于在早上找了解决办法:
即检查我本地目录的所有者和docker容器中的/var/lib/mysql目录的所有者是否为同一个用户.
docker run -ti --rm --entrypoint="/bin/bash" percona -c "whoami && id"
此命令的作用是查看容器的所有者, 显示为:
然后输入(不能换行):
docker run -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!
然后解决方法就是, 把当前目录的拥有者赋值给uid 999即mysql用户, 再重新启动容器
问题解决了! 浪费了一晚上时间, 不得不说, linux的权限控制知识还要加深!
来源:https://segmentfault.com/a/1190000021917842


猜你喜欢
- 本篇文章详细介绍了linux软连接和硬链接,废话不多说,接着往下看把。一 链接文件Linux链接分两种,一种被称为硬链接(Hard Link
- 也许有用户在使用GoDaddy主机时,常会发送一些垃圾邮件,在此我建议大家还是不要发了。如果一旦被认定为发垃圾邮件,他们会在两天内转向,暂停
- 此漏洞已帮其修复,并知会当事人SQL 注入漏洞危害巨大,但 SQL 注入也经常的被发现,少不小心过滤不完全就有可能让整个应用陷入困境。无意间
- Linux 下对于目录的切换,大家肯定会想到一个命令:cd 命令。这个是 Linux 下再基本不过的命令,如果这个命令都不知道的话,赶紧剖腹
- 3.你的目标目录被限制了访问权限。此项仅当该目录位于NTFS格式分区中时才可能出现。请在其上单击右键,选“属性”,再进入“安全”窗口,看列表
- 库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib
- 这几天下雨特大,门口的水长5厘米就浸入家里了,真的好险,不知为什么,总有一种喜欢听下雨的啪啪声,也许是希望大雨可以冲走心中所有一切郁闷不快吧
- 由现有镜像构建新镜像都是通过Dockerfile文档来实现的。1、新建Dockerfile文档在/home文件夹下新建一个文件夹,专门用来测
- 导航请确保你的网站导航都是以html的形式链接。所有页面之间应该有广泛的互联,如果无法实现这一点,可以考虑建立一个网站地图。首页网站的首页(
- 很多开店的新手,经过找货源、拍照、整理产品,订价格等等一系列的开店准备,本来怀着美好的憧憬开店,但是等到网店上线以后,很长一段时间没有卖出去
- 用shell脚本来给mysql加索引刚好用到, mark一下:#! /bin/bashtb_base=tb_student_arr=(&qu
- 一、前言首先,得明白发送一封邮件的流程,下面一段理论摘抄自廖雪峰的官网网站https://www.liaoxuefeng.com/artic
- 现阶段的网站多如牛毛,或者说比牛毛也多,但是基本的情况都是基于WEB 1.0模式,多数的用户上去的方式集中有两种:百度和友情链接
- 搜索引擎网站排名就如同每年春运的火车票一样,每个回家的人都在想尽办法将票搞到手。但真正有座位的票就那么多,再想买到好位置的票就得去花高价、找
- 上次,就遇到“HTTP 错误 500.100 - 内部服务器错误 - ASP 错误”,现在把所有Http状态代码含义表与部分解决方法贴出来。
- Godaddy主机Linux系统主机帐户的绝对路径是:/home/content/1/2/3/username/html/在路径里, &qu
- Internet正以空前的速度深入千家万户,不少公司或个人在网络上建立起主页和站点。公司通过网站发布产品信息、提供服务、寻求商业契机;而个人
- 北京时间10月29日消息,据国外媒体报道,美国Brower Piven律师事务所日前宣布,已经代表在2006年11月15日到2009年7月1
- 1、搭建telnet服务器2、搭建DHCP服务器3、搭建DNS服务器4、搭建sendmail服务器5、搭建FTP服务器6、搭建web服务器
- 随着互联网的快速发展,网购,这个名词对于广大网民来说已经是再熟悉不过了。只要上网,必定穿梭在网上人家的大街小巷之中。可以说互联网上的B2B,