1. 程式人生 > >docker中兩個容器間的互訪

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