docker部署mysql出错:mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)
记一次使用docker compose在ubuntu 18.04部署mysql服务出错的Debug过程
原来在centos7正常运行的mysql服务,docker-compose.yaml文件定义如下:
version: "3.7"services:mysql:image: mysql:5.7container_name: mysqlenv_file:- .envenvironment:- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}restart: alwaysports:- "3306:3306"privileged: truevolumes:- "mysql_data:/var/lib/mysql"networks:- backendvolumes:mysql_data:networks:backend:ipam:config:- subnet: 192.168.10.0/24
将该docker-compose.yaml的mysql服务在ubuntu启动,并查看状态
$ docker-compose up -d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d66bc17228ff mysql:5.7 "docker-entrypoint.s…" 26 seconds ago Restarting (1) 2 seconds ago mysql
发现mysql服务一直在重启,查看docker日志查找原因
$ docker logs mysql
2020-04-28 16:26:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.30-1debian10 started.
2020-04-28 16:26:20+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check configcommand was: mysqld --verbose --helpmysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
2020-04-28 16:26:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.30-1debian10 started.
2020-04-28 16:26:24+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check configcommand was: mysqld --verbose --helpmysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
......
google一下,发现使用dockers安装MySQL这篇博文有提到需要关闭selinux。ubuntu 18.04 默认使用的selinux模块是AppArmor,禁用AppArmor命令如下:
# 停止apparmor服务
sudo /etc/init.d/apparmor stop
# 禁止开机启动
sudo update-rc.d -f apparmor remove
# 查看apparmor服务的状态
$ sudo /etc/init.d/apparmor status
● apparmor.service - AppArmor initializationLoaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)Active: inactive (dead) since Wed 2020-04-29 00:09:39 CST; 24h agoDocs: man:apparmor(7)http://wiki.apparmor.net/Main PID: 552 (code=exited, status=0/SUCCESS)
但是禁用AppArmor之后重启mysql服务,还是报同样的错误。
几经周折,最后在这个Issues找到答案:原来是以docker的特权模式(privileged: true
)运行mysql服务时,AppArmor配置文件不会应用在容器内,而是因为我已在主机中安装了mysql,并且由于在特权模式下,将应用主机中的AppArmor配置文件,以希望查看来自主机而不是来自容器的调用,而这正是导致了错误的发生。
于是在Ubuntu18.04系统下彻底删除MySQL并重启系统之后,以docker的特权模式运行的mysql服务正常启动。不过由于我的mysql服务采用了挂载docker数据卷,而不是挂载宿主机的/etc目录,其实并不需要开启特权模式,所以最好的解决办法其实是以普通权限运行mysql服务,而不需要禁用AppArmor或者卸载本机的mysql。
以普通权限运行mysql服务的docker-compose.yaml
文件修改如下:
version: "3.7"services:mysql:image: mysql:5.7container_name: mysqlenv_file:- .envenvironment:- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}restart: alwaysports:- "3306:3306"volumes:- "mysql_data:/var/lib/mysql"networks:- backendvolumes:mysql_data:networks:backend:ipam:config:- subnet: 192.168.10.0/24
参考链接
- Mysql, Privileged mode, cannot open shared object file #7512
- mysql example failed: mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 13 - Permission denied) #7906
- Disable and remove AppArmor on Ubuntu based Linux distributions
- 在Ubuntu18.04系统下彻底删除MySQL的方法
docker部署mysql出错:mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)相关推荐
- mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)
root账号启动mysql mysqld --user=root
- docker部署rabbitmq出错touch: cannot touch ‘/etc/rabbitmq/rabbitmq.conf‘: Permission denied
docker部署rabbitmq出错touch: cannot touch '/etc/rabbitmq/rabbitmq.conf': Permission denied 首先拉取镜像,这里我使用d ...
- mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
安装MYSQL出错:a windows service with the name MYSQL already...service解决 今天把mysql5.1卸载了,想装个5.5,安装时提示:a wi ...
- macos docker挂载iso报failed to setup loop device: No such file or directory和mount: permission denied解决
介绍 最近在macos的docker容器中需要使用mount挂载iso,挂载时报错failed to setup loop device: No such file or directory和mo ...
- ubantu18.04使用docker部署mysql5.7及在宿主机登录容器内mysql
1.docker切换成国内源 cd /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors ...
- 使用IDEA集成docker部署springboot项目及bug解决并连同redis、MySQL
流程介绍 安装docker(windows) 配置docker源加速 docker安装redis IDEA集成docker # IDEA连接docker 配置springboot项目 打包成docke ...
- docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)
使用Dockerfile构建一个镜像,如果使用的base image 设置了USER项,则之后的所有构建动作则切换到了USER指定的用户,且docker run该镜像后的用户也是USER指定的用户. ...
- 【MySQL】MySQL开启general_log报错ERROR 29 (HY000) not found (OS errno 13 - Permission denied)
1.概述 mysql配置如下 ####### 开启全局查询日志,测试时候开启,生成环境绝对不能开启 === general_log=1 general_log_file=/usr/local/mysq ...
- mysqld: File ‘./binlog.index‘ not found (OS errno 13 - Permission denied)
背景:CentOS-Stream-9安装Mysql8.0社区版时,为了修改端口,增加了my.cnf文件,发现重启后报错,binlog.index找不到. 解决方法: 1.关掉SELINUX [root ...
- Django项目部署到Linux后,上传文件的时候,mkdirs创建目录OSError - Errno 13 Permission denied
1.今天,在Linux下安装了wkhtmltopdf,在导出pdf的时候遇到了一个问题,就是导出的时候,mkdirs的时候权限拒绝,主要抛出异常代码在下面if语句后的一行: if not os.pat ...
最新文章
- 知识图谱如何让“人工智能”更智能?
- 名词解释说明用英语怎么说_“用英语怎么说”译成How to say in English,典型的中式英语!...
- 万能进制转换计算器_这7款计算器APP一定会让你感到惊艳!
- CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
- Fence Repair(POJ-3253)
- matlab 韩明距离_使用Matlab计算各种距离Distance
- Android 自定义ViewGroup
- 微信小程序_阿里云api人脸识别
- 实现数据库版的图书管理系统
- 【vpn异地组网专题】爱快ikuai软路由-VM虚拟机安装教程
- 标准差和标准误差、平均值
- 我是凡尘最美的莲花-记再读仓央嘉措
- kettle工具实现数据的颗粒度转换以及珊瑚橘商务规划计算
- 转载:50有用的JavaScript和jQuery技术和插件
- Elasticsearch常见报错和处理方法
- 高德地图去掉logo和版权
- Qt模仿QQ聊天窗口合并功能
- 一文带你掌握MYSQL数据库
- 什么是浮动塌陷css,css样式float造成的浮动“塌陷”问题的解决办法
- 登上 Science,AlphaZero完整论文首次发布
热门文章
- 感觉丧的时候,读一读曾国藩
- java mock when return can not resolve method xxxx error
- 马哥教育的python课程到底好不好_马哥教育的网络授课怎么样?
- 鸿蒙系统和鸿鹄818,华为智慧屏将应用鸿蒙系统,搭载海思鸿鹄818芯片
- 聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传
- 如何知道股票里面有庄
- 夯实数据库根科技,提升企业数智化转型的“人效”和“能效” | 数据猿
- MIDIPLUS/迷笛studio m pro 2 valve声卡安装调试教程
- selenium对Alert弹框的多种处理
- 自驾游app开发的前景和优势