在我的应用程序设置中,我使用以下设置连接到数据库
spring.jpa.hibernate.ddl-auto=none
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/gosallowMultiQueries=true&createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=root
现在我有两个容器App和mysql。我已经链接了两个容器
docker run --name app --link mysql:dbalias appimage
但我收到通信链接失败错误。我无法连接 mysql 服务器
我使用下面的命令来运行 mysql 容器:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:latest
有什么建议吗?
你指的是localhost
这意味着应用程序正在尝试连接localhost
它自己的容器。不是您主机的本地主机。
如果这两个容器部署在同一用户定义的桥接网络内,您可以使用容器名称进行通信:
spring.datasource.url=jdbc:mysql://mysql:3306/gosallowMultiQueries=true&createDatabaseIfNotExist=true
如果不是,您可以使用 mysql 容器的容器 IP,但这可能会在容器重新启动/重新创建时发生变化。推荐的方法是创建用户定义的桥接网络:
$ docker network create my-network
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
73df63463bb2 bridge bridge local
4cabe965c01d host host local
c94ae182d8fa my-network bridge local
93ec6f5bf028 none null local
并在同一网络中启动两个容器:
$ docker run --name mysql --network=my-network -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:latest
当两个容器在同一用户定义的网络内启动时,您可以使用容器名称进行通信(您可以通过以下方式进行测试)docker exec
在其中一个容器内并尝试使用容器名称 ping 另一个容器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)