如何将本地托pipe的MySQL数据库连接到Docker容器
我知道这个问题可能会重复,但我没有得到任何明确的答案。 因为我对docker概念完全陌生。
通过docker-compose.yml
我能够运行应用程序。 现在我们要将应用程序移动到生产环境,但是我们不想使用容器数据库。 那么有什么办法,以便我可以连接我的本地MySQL数据库与应用程序使用docker-compose
?
我的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
部分,我只想连接到我本地托pipe的mysql
数据库。 任何帮助将不胜感激。
在dockernetworking中查找主机ip。 如果您使用docker-compose.yml version: "3"
,那么IP地址可能是: 172.18.0.1
, 但确认它正在search容器(您的主机)的“网关”:
docker inspect <container-id-or-name> | grep Gateway "Gateway": "", "IPv6Gateway": "", "Gateway": "172.18.0.1", "IPv6Gateway": "",
所以在你的172.18.0.1:3306
应用程序中指向MySQL,如下所示: 172.18.0.1:3306
: 172.18.0.1:3306
(也许在configuration文件中)。 考虑到这个IP是固定的,只要dockernetworking仍然是一样的(networking是由docker-compose创build的,除非你做docker-compose down
否则不会被删除)
另外,检查你的MySQL是否正在监听它的所有接口。 在my.cnf
search应该为0.0.0.0
bind-address
(如果您的服务器具有公共IP,请考虑安全问题)。
作为一种替代scheme,您可以将与主机相同的networking带到容器中,以共享本地主机,因此容器将在其中findmysql。 使用networking模式作为“主机”:
version: '3' services: web-app: build: context: . dockerfile: web-app/Dockerfile ports: - 8080:8080 network_mode: "host"
然后,将你的hibernate.properties
指向mysql,如下所示: localhost:3306
在docker里面使用172.17.0.1。 它的主机的静态IP地址