背景

最近学习mysql集群相关的知识 使用飞牛docker来部署mysql 按照课程的教程走 教程操作是没问题的 我在飞牛docker 使用同样的操作 就启动不起来 查看日志 查找资料 解决了这个问题
 

过程

这个docker运行的 命令

docker run -it -d --name mysql_1 -p 7001:3306 \
--net mynet --ip 172.18.0.2 \
-m 400m -v /vol1/1000/docker/mysql/mysql_01/data:/var/lib/mysql \
-v /vol1/1000/docker/mysql/mysql_01/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

报错信息为

2025-07-05 21:54:54+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.

2025-07-05 21:54:54+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

2025-07-05 21:54:54+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.

2025-07-05 21:54:54+08:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config

        command was: mysqld --lower_case_table_names=1 --verbose --help --log-bin-index=/tmp/tmp.dswA60G57F

        mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)

mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

看报错显示 没有权限阅读 /etc/mysql/conf.d/ 这个目录

刚开始还很奇怪 为什么报错信息是 没有权限阅读 /etc/mysql/conf.d/ 这个目录 查了一下 这个日志是docker内部的 在docker的视角来看 读取 /etc/mysql/conf.d 这个目录 等于 在读取宿主机的 /vol1/1000/docker/mysql/mysql_01/config 这个目录

2025-07-05 21:54:54+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

在看这条日志 在mysql镜像启动时 mysql 自己切换了 用户 但是这个用户权限比较低 使用导致 没有权限 阅读挂载的目录

使用修改一下 宿主机的目录权限 就可以顺利运行了

chmod 755 /vol1/1000/docker/mysql/mysql_01/config

使用 -v 或 --mount 挂载宿主机目录时,本质上是将宿主机的目录和文件系统权限直接映射到容器内 必须时刻关注容器内运行进程的用户是否有权限访问这个挂载点

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐