mysql - 连接到主机上的 MySQL 数据库的 Dockerized Web 应用程序

标签 mysql jdbc docker

我想迁移我的应用程序部署以使用 docker/docker hub。当前的生产设置是在运行 Apache、Tomcat 和 MySQL 的 2 台 Linux 服务器之间实现流量负载平衡。 Java web 应用程序通过 JDBC 连接到 master+slave MySQL DB。

为了尽量减少此更改的影响,作为第一步,我正在考虑将 tomcat 和 Web 应用程序容器化。让 Apache 和 MySQL 像现在一样在主机上运行。

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

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

我研究这些东西已经有一段时间了,我不敢相信没有比我上面提出的更好的解决方案了。

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

编辑 有人建议“From inside of a Docker container, how do I connect to the localhost of the machine?”是这个的副本 - 但潜在的问题仍然存在。每次我从一个图像创建一个 Docker 容器时,我可能会为需要被授予对数据库的访问权限的容器获得一个新的 IP 地址。我想尝试避免必须这样做。

非常感谢

最佳答案

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

首先运行你的 MySQL:

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

然后使用链接运行您的应用:

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 Repo 的更多信息和 Docker docs .

关于mysql - 连接到主机上的 MySQL 数据库的 Dockerized Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886633/

相关文章:

java - while(rs.next()) 不返回所有记录,只返回最后一条

mysql - 无法在 Pehtaho 报表设计器中通过 JDBC 连接到数据库

java - 使用executeQuery时出现NullPointerException

mysql - 如何将容器网络放入 kubernetes YAML 文件

mysql - 如何在 SQL 中转置表

mysql - 对于经常更新的表的长 SQL 查询,我应该期望得到什么结果?

docker - Amazon ECR 的拉取访问被拒绝,存储库不存在或可能需要 'docker login'

docker - 在 Windows 中使用 docker-compose 创建挂载源路径时出错

MySQL选择两个具有重复条件的最小id

javascript - jquery ajax 调用 db 无响应