记一次使用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)相关推荐

  1. mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)

    root账号启动mysql mysqld --user=root

  2. docker部署rabbitmq出错touch: cannot touch ‘/etc/rabbitmq/rabbitmq.conf‘: Permission denied

    docker部署rabbitmq出错touch: cannot touch '/etc/rabbitmq/rabbitmq.conf': Permission denied 首先拉取镜像,这里我使用d ...

  3. 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 ...

  4. 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 ...

  5. ubantu18.04使用docker部署mysql5.7及在宿主机登录容器内mysql

    1.docker切换成国内源 cd /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors ...

  6. 使用IDEA集成docker部署springboot项目及bug解决并连同redis、MySQL

    流程介绍 安装docker(windows) 配置docker源加速 docker安装redis IDEA集成docker # IDEA连接docker 配置springboot项目 打包成docke ...

  7. docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)

    使用Dockerfile构建一个镜像,如果使用的base image 设置了USER项,则之后的所有构建动作则切换到了USER指定的用户,且docker run该镜像后的用户也是USER指定的用户. ...

  8. 【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 ...

  9. mysqld: File ‘./binlog.index‘ not found (OS errno 13 - Permission denied)

    背景:CentOS-Stream-9安装Mysql8.0社区版时,为了修改端口,增加了my.cnf文件,发现重启后报错,binlog.index找不到. 解决方法: 1.关掉SELINUX [root ...

  10. Django项目部署到Linux后,上传文件的时候,mkdirs创建目录OSError - Errno 13 Permission denied

    1.今天,在Linux下安装了wkhtmltopdf,在导出pdf的时候遇到了一个问题,就是导出的时候,mkdirs的时候权限拒绝,主要抛出异常代码在下面if语句后的一行: if not os.pat ...

最新文章

  1. 知识图谱如何让“人工智能”更智能?
  2. 名词解释说明用英语怎么说_“用英语怎么说”译成How to say in English,典型的中式英语!...
  3. 万能进制转换计算器_这7款计算器APP一定会让你感到惊艳!
  4. CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
  5. Fence Repair(POJ-3253)
  6. matlab 韩明距离_使用Matlab计算各种距离Distance
  7. Android 自定义ViewGroup
  8. 微信小程序_阿里云api人脸识别
  9. 实现数据库版的图书管理系统
  10. 【vpn异地组网专题】爱快ikuai软路由-VM虚拟机安装教程
  11. 标准差和标准误差、平均值
  12. 我是凡尘最美的莲花-记再读仓央嘉措
  13. kettle工具实现数据的颗粒度转换以及珊瑚橘商务规划计算
  14. 转载:50有用的JavaScript和jQuery技术和插件
  15. Elasticsearch常见报错和处理方法
  16. 高德地图去掉logo和版权
  17. Qt模仿QQ聊天窗口合并功能
  18. 一文带你掌握MYSQL数据库
  19. 什么是浮动塌陷css,css样式float造成的浮动“塌陷”问题的解决办法
  20. 登上 Science,AlphaZero完整论文首次发布

热门文章

  1. 感觉丧的时候,读一读曾国藩
  2. java mock when return can not resolve method xxxx error
  3. 马哥教育的python课程到底好不好_马哥教育的网络授课怎么样?
  4. 鸿蒙系统和鸿鹄818,华为智慧屏将应用鸿蒙系统,搭载海思鸿鹄818芯片
  5. 聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传
  6. 如何知道股票里面有庄
  7. 夯实数据库根科技,提升企业数智化转型的“人效”和“能效” | 数据猿
  8. MIDIPLUS/迷笛studio m pro 2 valve声卡安装调试教程
  9. selenium对Alert弹框的多种处理
  10. 自驾游app开发的前景和优势