如何将本地托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.cnfsearch应该为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地址