连接到docker中的mysql服务器

时间:2015-04-03 11:42:17

标签: python mysql docker mariadb dockerfile

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

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 app,我只想在第一个容器中连接数据库,如何确定要使用的主机?

1 个答案:

答案 0 :(得分:4)

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

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

当您在应用程序运行中执行--link时,您声明要将名为mysqlserver的容器的EXPOSEd端口链接到要命名为myapp的容器。 Docker更新/ etc / hosts文件。因此,如果您使用/ etc / hosts文件,您应该会看到如下所示的行:

172.17.0.26 mysql 5c960433e26a mysqlserver

所以这就是为什么你的python中的引用要托管' mysql'作品。默认端口是3306.所以,这应该连接你。将此主机和端口用于python中使用的任何mysql连接包。

这是我在其众所周知的端口上与其他对象连接的方式。你也可以使用环境变量,但是,我认为这可能正在逐步淘汰......不知道......

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="...")

无论哪种方式。这是发现。还有更复杂的方法,使用consul,etcd,skydns,registrator。我喜欢skydns / registrator配对,registrator监视你的docker守护进程,当创建新容器时,它会将dns记录插入到etcd中,skydns可以使用它来模仿dns服务器。使用这种技术你也可以获得ip和端口。