2015-04-03 137 views
0

如果我跑在第一搬運工容器MySQL服務器:連接到MySQL服務器搬運工

docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.5 

,並與第一容器連接第二搬運工容器:

docker run --name myapp --link mysqlserver:mysql -d vladimir/app 

,如果在第二搬運工容器我有python應用程序,我只想連接到第一個容器中的數據庫,如何確定使用哪個主機?

回答

2

我對mysql不太熟悉。縱觀MySQL文檔看起來這可能是你想要的那種命令:

import _mysql 
db=_mysql.connect(host="mysql",port=3306,passwd="...",db="...") 

當你沒有在您的應用程序的運行--link,你宣稱要鏈接名爲容器中暴露的端口mysqlserver到要命名爲myapp的容器。 Docker更新/ etc/hosts文件。所以,如果你的貓在/ etc/hosts文件,你會看到一條線,看起來像:

172.17.0.26 mysql 5c960433e26a mysqlserver 

所以這就是爲什麼在你的Python引用舉辦「MySQL的作品。默認端口是3306.所以,這應該連接你。使用這個主機和端口來處理你在python中使用的任何mysql連接包。

這是我如何連接其他對象,在他們衆所周知的端口上。您還可以使用環境變量,但是,我認爲這可能是被淘汰......說不上來......

[email protected]:/# env | grep MYSQL 
MYSQL_ENV_MYSQL_ROOT_PASSWORD=pass 
MYSQL_PORT_3306_TCP_PORT=3306 
MYSQL_PORT_3306_TCP=tcp://172.17.0.32:3306 
MYSQL_ENV_MYSQL_VERSION=5.5.42 
MYSQL_NAME=/myapp/mysql 
MYSQL_PORT_3306_TCP_PROTO=tcp 
MYSQL_PORT_3306_TCP_ADDR=172.17.0.32 
MYSQL_ENV_MYSQL_MAJOR=5.5 
MYSQL_PORT=tcp://172.17.0.32:3306 

,所以你可以修改你的連接線使用環境:

import os 
myhost = os.environ.get('MYSQL_PORT_3306_TCP_ADDR') 
myport = int(os.environ.get('MYSQL_PORT_3306_TCP_PORT')) 
import _mysql 
db=_mysql.connect(host=myhost,port=myport,passwd="...",db="...") 

無論哪種方式。這是發現。還有更復雜的方法,使用領事,etcd,skydns,註冊人。我喜歡skydns /註冊器配對,註冊者監視你的docker守護進程,當創建新的容器時,它將dns記錄插入到etcd中,skydns可以用來模擬dns服務器。使用這種技術你也可以獲得IP和端口。

+0

如何進入碼頭集裝箱? – 2015-04-03 16:56:24

+0

這是一個不同的問題:-)基本上,使用一個exec行:docker exec -it myapp bash – Greg 2015-04-05 13:28:45