执行docker run ...mysql容器启动失败

1,098 阅读1分钟

问题描述:

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

执行docker run 后,通过docker ps命令查看运行的容器,发现mysql容器没有启动,再通过docker ps -a 命令
查看所有的容器,找到mysql容器的status:Exited(1) 7 seconds ago.

问题排查分析:

通过docker logs -f container_id命令查看,挂载目录出了问题,不存在/etc/mysql/conf.d这个目录。
由于宿主机的 /mydata/mysql/conf是空的,所以找不到/etc/mysql/conf.d中conf.d这个目录,导致容器创建失败。

查看mysql官网发现这个挂载方式已经不适用了,配置文件已经不再/etc/mysql里了,里面只有两个空目录,
分别是conf.d和mysql.conf.d,这两个目录里面什么都没有。真正的配置文件是/etc/my.cnf,因此需要修改查看官网:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
    

解决方法:

#先随意创建一个mysql容器
docker run -d -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#将mysql容器中的/etc/mysql中的mysql目录下的文件复制到宿主机/mydata/mysql/conf目录下,
命令格式:docker cp 容器id:容器内目录 宿主机目录
docker cp 4b1a0fe53315:/etc/mysql/ /mydata/mysql/conf
docker cp 4b1a0fe53315:/etc/mysql/my.cnf /mydata/mysql/conf/mysql.conf.d#删除容器:docker rm -f 4b1a0fe53315
#重新启动mysql容器,docker ps 查看状态,成功。

参考文献

https://blog.csdn.net/qq_45564783/article/details/126440171