docker启动mysql容器失败原因及排查记录
背景
最近在尝试容器搭建mysql集群时碰到一个错误,启动mysql时碰到一个,经过排查解决,在此做一个记录
问题过程
启动mysql容器
$ sudo docker run -d -p 3306:3306 \ > --name mysql \ > -v /opt/mysql/log:/var/log/mysql \ > -v /opt/mysql/data:/var/lib/mysql \ > -v /opt/mysql/conf:/etc/mysql \ > -e mysql_root_password=root \ > mysql 3cf4012772cc2e22732aa6d5eb716d7b290a95da25b750d4a1189e77ab985f33 # 运行后,查看运行中的容器发现没有刚启动mysql [bing@centosone nginx]$ sudo docker ps container id image command created status ports names 5c7b103435d1 nginx:latest "/docker-entrypoint.…" 8 hours ago up 8 hours 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:85->80/tcp, [::]:85->80/tcp my-nginx 28cda42916c3 nginx:latest "/docker-entrypoint.…" 15 hours ago up 15 hours 0.0.0.0:82->80/tcp, [::]:82->80/tcp
mysql
/log
:存储mysql日志mysql
/data
:是数据库文件(库表数据存放处)存放的地方。必须要挂载到容器外,否则容器重启一切数据消失。mysql
/conf
:mysql配置,mysql启动时读取配置
查看所有容器docker ps -a
发现mysql是已经exit了
$ sudo docker ps -a container id image command created status ports names 4e163949caa2 mysql "docker-entrypoint.s…" 20 minutes ago exited (1) 17 minutes ago mysql
然后尝试删除容器重启还是一样
$ sudo docker rm 4e1 4e1 $ sudo docker run -p 3306:3306 --name mysql -v /opt/mysql/log:/var/log/mysql -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/conf:/etc/mysql -e mysql_root_password=root -d mysql b3153c7d9d33f28e9808fbd6f8feea44ac12e45f9aec637a789a29b9f7f5dcd2 # 仍然是exit状态 $ sudo docker ps -a container id image command created status ports names b3153c7d9d33 mysql "docker-entrypoint.s…" 3 seconds ago exited (1) 2 seconds ago mysql
查看容器日志
$ sudo docker logs --tail 100 --follow --timestamps {容器名称}
问题原因
如上图,查看日志发现是没有配置文件目录,我们的命令指定的配置文件路径是/etc/mysql/,而容器读取的配置文件路径是/etc/mysql/conf.d/。
在这一行-v /opt/mysql/conf:/etc/mysql,我们将主机路径/opt/mysql/conf挂载到容器路径/etc/mysql下,实际上容器配置在/etc/mysql/conf.d/目录下。
修改启动命令
修改启动命令中的配置文件路径,再次重新启动成功,如下:
sudo docker run -p 3306:3306 --name mysql \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/conf:/etc/mysql/conf.d \ -e mysql_root_password=root \ -d mysql ef8d15ff3c2828b718357ad7d41117ca46c3fec7bb6b3a365c886926b275fbb8 # 启动成功 sudo docker ps [sudo] bing 的密码: container id image command created status ports names ef8d15ff3c28 mysql "docker-entrypoint.s…" 11 minutes ago up 11 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
mysql容器终于是 up 状态了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论