docker中兩個容器間的互訪
在前幾篇文章中,我們討論瞭如何在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