问题:
使用docker run 命令运行mysql成功,但是使用docker ps 看不到容器实例,使用docker ps -a
看到刚运行的mysql实例自动退出了,具体情况如下:
执行如下命令想要创建一个mysql容器实例,
docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
执行完后使用docker ps
查看,未找到,然后使用docker ps -a
查看,看到已经退出了。
原因及解决方案:
检查容器日志
docker logs --tail 100 [容器id]
报错如下:
\2023-03-14 03:56:38+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.
2023-03-14 03:56:38+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.UZOXvK5dSl
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!
日志显示,在mysql容器启动时,没有读取到配置文件。而配置文件是我们在创建容器时,挂载数据卷时设置的,于是明确问题定位在了创建容器的命令中。发现在挂载数据卷的时候,只指定了配置文件所在的文件夹,并没有明确的指定要挂载文件夹中的哪些文件。
在报错的mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
这句话中,也明确指明了找不到/etc/mysql/conf.d/
这个目录,于是就要修改第三个-v。
修改docker run 命令如下:
docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
再次执行就不会自动退出了。
在后面学习devops使遇到了类似的这种情况:
使用docker run命令启动容器后,用docker ps命令查看,找不到刚才运行的容器,使用docker ps -a查看,刚才运行的容器已经处于停止状态,相当于刚运行就被停止了。
在后面加上-c "tail -f /dev/null"
表示不中断
docker run -id -p 8082:8082 --name test-7 582698141c6c /bin/bash -c "tail -f /dev/null"
看到的老师如果遇到过这种情况,烦请留言解答,我将不胜感激。