1. 程式人生 > >docker mysql問題記錄

docker mysql問題記錄

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

報錯資訊:

[[email protected]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