欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

docker mysql问题记录和解决方法

程序员文章站 2022-04-07 10:00:37
docker一个mysql时,通过dockerfile首次生成镜像且启动容器,查看mysql成功。 再次通过-v参数指定挂载目录后,生成镜像,访问mysql报错: 命令: docke...

docker一个mysql时,通过dockerfile首次生成镜像且启动容器,查看mysql成功。

再次通过-v参数指定挂载目录后,生成镜像,访问mysql报错:

命令:

docker run -d -p 3307:3306 -v /var/lib/docker/vfs/dir/mydata:/var/lib/mysql --name dbserver2 csphere/mysql:5.5

报错信息:

[root@47b381a290a6 /]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

经过百度,这个报错信息一般是找不到mysql.sock文件,或者权限不足引起。

删除异常容器:

[root@localhost mysql]# docker stop dbserver2 
dbserver2
[root@localhost mysql]# 
[root@localhost mysql]# docker rm dbserver2 
dbserver2

然后使用进入容器的方法启动容器:

[root@localhost mysql]# docker run -it -p 3307:3306 -v /var/lib/docker/vfs/dir/mydata:/var/lib/mysql --name dbserver2 csphere/mysql:5.5 
===> MariaDB not install...
===> Initializing maria database... 
chown: changing ownership of '/var/lib/mysql': Permission denied
Cannot change ownership of the database directories to the 'mysql'
user.  Check that you have the necessary permissions and try again.
===> System databases initialized...
===> Waiting for MariaDB to start...

发现在dockerfile文件指定的脚本firstrun_maria执行过程中,有一句命令如下:

 echo "===> Initializing maria database... "
 mysql_install_db --user=mysql --ldata=${DATA_DIR}
 echo "===> System databases initialized..."

在执行mysql_install_db过程中,提示权限不足。

经过百度,得知:Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示以上信息。解决方法如下:

1. 在docker run中加入 –privileged=true 给容器加上特定权限

2. 关闭selinux

3. 在selinux添加规则,修改挂载目录de

我采用了第一种方法,问题解决。命令如下:

docker run -d -p 3306:3306 -v /var/lib/docker/vfs/dir/mydata:/var/lib/mysql --privileged=true --name dbserver csphere/mysql:5.5