2015-04-03 119 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