在docker中连接到mysql服务器

如果我在第一个docker容器中运行mysql服务器:

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

并将第二docker集装箱与第一集装箱连接起来:

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

如果在第二个docker集装箱我有Python应用程序,我只想连接到第一个容器中的数据库,如何确定使用哪个主机?

我不太熟悉mysql。 看看mysql文档,看起来这可能是你想要的那种命令:

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

当您在应用程序中运行“ – ”链接时,您声明要将名为mysqlserver的容器的EXPOSEd端口链接到名为myapp的容器。 Docker更新/ etc / hosts文件。 所以,如果你捕捉/ etc / hosts文件,你应该看到如下所示的一行:

 172.17.0.26 mysql 5c960433e26a mysqlserver 

所以这就是为什么在你的Python中引用“mysql”的作品。 默认端口是3306.所以,这应该连接你。 使用这个主机和端口来从python使用任何mysql连接包。

这是我如何连接其他对象,在他们众所周知的端口。 你也可以使用环境variables,但是,我认为这可能会被淘汰…不知道…

 root@d23d8be2a6fa:/# 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守护进程,当创build新的容器时,它将dnslogging插入etcd,skydns可以用来模拟dns服务器。 使用这种技术你也可以得到ip和port。