在前几篇文章中,我们讨论了如何在Ubuntu14.04(64位)中安装docker,以及如何在docker中部署一个apache服务器并在外部电脑中访问该服务器,和在docker中部署
一个mysql数据库并在外部电脑中访问这个数据库。
下面来讨论下docker的容器间的互访,主要以两个容器间的mysql数据库互访为例。
有时候,两个启动的容器之间是需要交流的,比如我们在一个容器中运行了一个apache服务器,上面有一个网站,然后网站的数据库我们就可以部署在另外一个容器中。或者两个容器都部署了数据库,然后这两个数据库之间需要交流。
下面我们以一个容器访问另一个容器的mysql数据库为例。
容器间的访问主要是通过—link参数来进行的。
首先按照前面的教程在一个镜像中安装好xampp。
然后启动这个镜像,并将启动的容器命名为server,作为mysql服务器:
sudo docker run –i –t –P –-name=server ubuntu2 /bin/bash
(注意P是大写)
进入到容器server的命令行后,启动mysql
/opt/lampp/lampp start
在本机电脑中打开另一个命令行终端,运行另外一个容器,作为mysql客户端,并访问容器server中的mysql数据库:
sudo docker run –i –t –P --link=server:db –name=client ubuntu2 /bin/bash
(注意P是大写)
--link=server:db表示把刚才的server容器重新命名成db,然后你就可以在上面的client容器中访问到server容器了。
在容器client命令行中,启动mysql:
/opt/lampp/lampp start
接着访问server容器中的mysql数据库
mysql -h db –u root
(注意-h后面的值要对应link=server:db中的值)
到这里就,client就连接上了server容器的mysql数据库了。
看有哪些数据库:
show databases;
然后新建一个数据库:
create database hehe;
然后回到server容器中的命令行,进入msyql:
mysql –u root
查看有哪些数据库:
show databases;
此时应该可以看到hehe。表明client容器中连接上的确实是server中的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