我想迁移我的应用程序部署以使用 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/