2015-11-07 78 views
-1

我想在兩種情況下從一個應用程序容器連接到數據庫容器,一個成功,一個沒有。碼頭:通過dockerhost連接到數據庫容器

有兩個容器我dockerhost:與連接到3356上dockerhost 3306端口

  1. mysql的容器
  2. 應用程序容器

在工作中,dockerhost具有IP地址10.0.2.15 ,在家裏,dockerhost的IP地址是192.168.8.11(主機名-I)。
在這兩種情況下,我想從應用程序容器與主機10.0.2.15/192.168.8.11和端口3356

連接到數據庫容器。當我做這個工作(Windows網絡中,流浪/ VirtualBox虛擬dockerhost) ,這是沒有問題的。我可以從應用程序容器中'telnet 10.0.2.15 3356'並連接到db容器。 當我在家裏做這個(Ubuntu)時,不可能連接。唯一的方法是使用端口3306的db容器(172.17.0.2)的docker ip地址。但是,我可以ping 192.168.8.11。

啓動容器的腳本是相同的;我不使用--add-host,因此dockerhost IP地址不在/ etc/hosts中。

有什麼建議嗎?

+0

閱讀文件上的連接容器:http://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ –

+0

和最近的碼頭工人的版本引入了新的網絡功能:HTTP: //docs.docker.com/engine/userguide/networking/dockernetworks/ –

+0

我沒看過文檔。問題是,爲什麼它在一種情況下而不是在另一種情況下是相同的。在這兩種情況下都使用Docker 1.9。 – Chris

回答

1

好,使用搬運工運行3個數據庫實例

docker run --name mysqldb1 -e MYSQL_ROOT_PASSWORD=changeme -d mysql 
docker run --name mysqldb2 -e MYSQL_ROOT_PASSWORD=changeme -d mysql 
docker run --name mysqldb3 -e MYSQL_ROOT_PASSWORD=changeme -d mysql 

每個人都會有我的主機上的不同IP地址:

$ for i in mysqldb1 mysqldb2 mysqldb3 
> do 
> docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $i 
> done 
172.17.0.2 
172.17.0.3 
172.17.0.4 

重複此你的機器上,你會很可能有不同的IP地址。

那麼這個問題是如何解決的。

較舊的方法(在Docker 1.9中不推薦使用)是使用鏈接。下面的命令將顯示如何環境變量的聯動應用的容器(使用數據庫中的一個)

$ docker run -it --rm --link mysqldb1:mysql mysql env 
.. 
MYSQL_PORT_3306_TCP_ADDR=172.17.0.2 

$ docker run -it --rm --link mysqldb2:mysql mysql env 
.. 
MYSQL_PORT_3306_TCP_ADDR=172.17.0.3 

$ docker run -it --rm --link mysqldb3:mysql mysql env 
.. 
MYSQL_PORT_3306_TCP_ADDR=172.17.0.4 

中設置和下面的演示鏈接怎麼也創建:

$ docker run -it --rm --link mysqldb1:mysql mysql grep mysql /etc/hosts 
172.17.0.2 mysql 2a12644351a0 mysqldb1 

$ docker run -it --rm --link mysqldb2:mysql mysql grep mysql /etc/hosts 
172.17.0.3 mysql 89140cbf68c7 mysqldb2 

$ docker run -it --rm --link mysqldb3:mysql mysql grep mysql /etc/hosts 
172.17.0.4 mysql 27535e8848ef mysqldb3 

所以你可以使用「mysql」主機名或「MYSQL_PORT_3306_TCP_ADDR」環境變量引用其他容器。


在Docker 1.9中,有一個更強大的網絡功能,可以在主機間連接容器。

http://docs.docker.com/engine/userguide/networking/dockernetworks/

+0

+1僅僅是這一點魔法:'碼頭檢查 - 格式='{{range.NetworkSettings.Networks}} {{.IPAddress}} {{end}':) – icc97