docker启动mysql5.7报错

启动命令

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306 :将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql :将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql :将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/ :将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root :初始化 root 用户的密码

启动无报错,但是docker ps命令并未看到成功启动,docker ps 命令是只显示运行中的容器,-a参数则显示全部状态的容器

依次使用以下命令排查

#只显示运行的容器
docker ps
#-a, --all: 显示所有容器,包括停止的容器。
docker ps -a
#查看日志
docker logs containerId

日志如下

2025-07-08 18:09:57+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
2025-07-08 18:09:58+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.wlCortKXUT
        mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

通过日志可知它找不到/etc/mysql/conf.d/

原因:mysql5.7的my.cnf不在/etc/mysql下,而是在 /etc/my.cnf 下,所以会找不到

解决方法:

第一步:在宿主机创建目录(解释说明宿主机,你在哪里安装的docker,那个就是宿主机,比如我是在linux安装的,宿主机指的就是我的linux系统,这里就是在linux看你有没有这两个目录没有就创建)

# 创建子目录
mkdir -p /mydata/mysql/conf/conf.d
mkdir -p /mydata/mysql/conf/mysql.conf.d

创建好可以进到  cd /mydata/mysql/conf 验证是否存在

第二步:删除或者重命名 之前报错的容器

# 删除它,以释放容器名称(推荐)
docker rm mysql

# 重命名旧容器
docker rename mysql old_mysql

第三步:启动

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456  \
-d mysql:5.7

然后再用 docker ps 查看即可启动成功

参考博客:Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(报错已解决)-腾讯云开发者社区-腾讯云

你可能感兴趣的:(docker,容器,运维)