昨天写项目时需要用到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的权限控制知识还要加深!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。