在我的应用程序设置中,我使用以下设置连接到数据库
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
有什么建议吗?
答案 0 :(得分:3)
您要指向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操作)。