Dockerized Web应用程序连接到主机上的MySQL DB

Yan*_*Yak 5 mysql jdbc docker

我想迁移我的应用程序部署以使用docker/docker hub.当前的生产设置是在两台Linux服务器之间平衡流量,运行Apache,Tomcat和MySQL.Java Web应用程序通过JDBC连接到主+从MySQL数据库.

为了最大限度地减少这种变化的影响,作为第一步,我正在考虑将tomcat和Web应用程序容纳在容器中.让Apache和MySQL像现在一样在主机上运行.

我遇到的问题是将在docker容器中运行的应用程序与在主机上运行的MySQL DB连接起来.

我现在能做的最好的事情是连接到docker容器,获取它的IP地址,然后使用SQL GRANT来允许该IP地址访问数据库.这样做的问题在于,每次运行容器时,您都可能获得新的IP地址,因此每次都必须运行一个授权.

我一直在玩这个东西一段时间,我不敢相信没有比我上面提出的更好的解决方案.

有人做过这样的事吗?任何人都有任何关于如何最好地解决这个问题的建议.

编辑 有人建议" 从Docker容器内部,我如何连接到机器的本地主机? "是一个副本 - 但潜在的问题仍然存在.每次我从图像创建Docker容器时,我都可能获得需要被授予访问DB的容器的新IP地址.我想尽量避免这样做.

非常感谢

nec*_*ciu 4

link您应该使用 dockerized MySQL 服务器和连接两个容器的 Docker命令。

首先运行你的MySQL:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

然后使用以下命令运行您的应用程序link

docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql

现在您可以从环境变量中获取数据库的地址和端口:

docker exec -it some-app printenv

寻找类似的东西:MYSQL_PORT_3306_TCP_PORT。现在您只需在应用程序中使用这些变量即可。

有关Docker MySQL RepoDocker 文档的更多信息。

  • 我知道这是一个选择,但我不想在此时经历迁移开发、测试和生产数据库的过程只是为了迁移到 docker。所以这个选项暂时没有。 (3认同)