前面两篇博客中,我们讨论了如何安装和使用docker,以及如何在docker中部署一个apache服务器,并在外部电脑中访问这个服务器
下面我们来讨论下如何利用docker来部署一个mysql数据库,并在外部电脑中访问这个数据库:
注意:如果你对以下某些命令不了解,请看我的第一篇博客
上面安装的xampp中已经包含了mysql数据库了,所以我就不重新安装mysql了。
首先按照上面教程在本机电脑中安装好xampp,并配置好.bashrc;
然后启动刚才新建的那个镜像ubuntu2,并将本机电脑的8080端口映射到容器的3306端口(mysql默认监听3306端口):
sudo docker run –i –t –p 8080:3306 ubuntu2 /bin/bash
执行上述命令后,可进入到容器的命令行。
接着在容器命令行中输入以下命令来启动mysql:
/opt/lampp/lampp start
<img src="http://img.blog.csdn.net/20150529120907846?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amFuNTExNTM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
接着进入到mysql中
mysql –u root
查看mysql中有哪些数据库:
show databases;
打开本机电脑的另一个命令行终端,启动本机电脑mysql(本机电脑也要安装xampp)
/opt/lampp/lampp start
连接到上述容器中的mysql数据库:
mysql -h 0.0.0.0 –P 8080 -u root
<img src="http://img.blog.csdn.net/20150529121214120?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amFuNTExNTM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
(这里可以用sudo docker ps来看下容器的端口映射)
参数h表示要进入哪台机器上的msyql(host),P(大写)表示端口号。
不出意外的话,此时就可以连接上容器中mysql了;
查看有哪些数据库:
show databases;
可比较下这次返回的结果和刚才的结果是否一样。
接着新建一个数据库:
create database helloworld;
回到容器命令行中,再次查看有哪些数据库:
show databases;
此时就可以看到在本机电脑中新建的那个数据库helloworld了。
其余对数据库的操作也是一样的。
到这里,就讲完了如何在docker中部署一个mysql数据库,并在外部电脑中访问这个数据库。
常见问题:
1. 出现 lost connection to mysql server的错误:
解决方法:
首先进入到目录(如果你的mysql是通过xampp安装的)/opt/lampp/etc:
cd /opt/lampp/etc
然后用vim 打开my.cnf,找到这一行:
bind-address = 127.0.0.1
将它注释掉,如果没有这行则忽略。
然后找到[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:
skip-name-resolve
保存并退出。
接着重启xampp:
/opt/lampp/lampp restart
到这里应该就解决了。
如果你的Mysql不是通过xampp安装的,则my.cnf一般在一般只会存放在/etc/my.cnf或者/etc/mysql/my.cnf下;
对my.cnf的修改跟上面的一样,然后重启mysql:
/etc/init.d/mysql restart
2. Host ip is not allowed to connet to this mysql server之类的错误
解决方法:
进入mysql:
mysql -u root
然后对其他用户授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
到这里应该就解决了。
如果还解决,请参考这里:http://joinyo.iteye.com/blog/1489380