我刚刚遇到了一个问题。我正在用MySQL作为数据库对接一个springboot应用程序,它在本地设置中工作得很好。但是当我尝试使用docker-compose
对接应用程序时,MySQL容器工作正常,可以在我的工作台中访问,但是我的应用程序无法访问它,引发了通信链接故障。
这是我正在使用的合成文件:
version: "3.8"
services:
mysqldb:
image: mysql:5.7
restart:unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=baskartest
ports:
- 3307:3306
volumes:
- db:/var/lib/mysql
app:
depends_on:
- mysqldb
build: ./bezkoder-app
restart:on-failure
env_file: ./.env
ports:
- 8084:8080
environment:
SPRING_APPLICATION_JSON: '{
"spring.datasource.url" : "jdbc:mysql://mysqldb:3306/baskartest?useSSL=false",
"spring.datasource.username" : "root",
"spring.datasource.password" : "root",
"spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL5InnoDBDialect",
"spring.jpa.hibernate.ddl-auto" : "update"
}'
volumes:
- .m2:/root/.m2
stdin_open: true
tty: true
MySQL工作正常,但我的服务中的应用程序无法与它通信。
我看到的是:
任何帮助都将不胜感激!
2条答案
按热度按时间vuktfyat1#
我在
docker-compose.yml
文件中做了一些小的改动,请使用这个文件。它工作正常。ui7jx7zq2#
在我使用Docker和容器相互通信的短暂经验中,我发现
localhost
配置URL不起作用。因为一个容器不能只使用localhost:[PORT]
与另一个容器通信。解决这个问题的一个方法是计算出容器运行的机器的静态IP地址,然后使用这个(本地)IP地址而不是localhost来定义数据库的端点。
在我的情况下我是这样做的:
在您的情况下,您可能希望使用如下所示的数据源URL:
...192.168.1.100:3306/baskartest...*