通过 docker-compose.yml
我能够运行该应用程序。现在我们想将应用程序迁移到生产环境,但我们不想使用容器数据库。那么有什么方法可以让我使用 docker-compose
将我的本地 MySQL 数据库与应用程序连接起来吗?
我的 docker-compose.yml 看起来像:
version: '3'
services:
web-app:
build:
context: .
dockerfile: web-app/Dockerfile
ports:
- 8080:8080
links:
- app-db
app-db:
build:
context: .
dockerfile: app-db/Dockerfile
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=Optimize
ports:
- 3306:3306
而不是 app-db
部分我只想连接到我本地托管的 mysql
数据库。
原文由 Prateek Naik 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 docker 网络中找到主机 ip。如果您使用 docker-compose.yml
version: "3"
可能该 IP 是:172.18.0.1
, 但确认它 正在搜索您的容器(您的主机)的“网关”:因此,在您的 docker 应用程序内部指向 MySQL:
172.18.0.1:3306
(可能在配置文件中)。考虑到 IP 是固定的,只要 docker 网络仍然相同(网络是由 docker-compose 创建的,除非你这样做,否则它不会被删除docker-compose down
)此外,检查您的 MySQL 是否正在侦听其所有接口。在您的
my.cnf
搜索bind-address
应该是0.0.0.0
(如果您的服务器有公共 IP,请考虑安全问题)。作为替代方案,您可以为容器带来与主机相同的网络,以便共享本地主机,因此容器将在那里找到 mysql。使用网络模式作为“主机”:
然后,将您的
hibernate.properties
指向 mysql,如下所示:localhost:3306