如何将mysql容器与spring-boot应用程序容器连接。我尝试使用网络,然后尝试docker-compose,但似乎我的spring-boot应用程序无法连接。
docker-compose.yml
version: '3'
services:
mysql-docker-container:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my_app
volumes:
- /data/mysql
authenticate:
image: authenticate
build:
context: ./
dockerfile: Dockerfile
depends_on:
- mysql-docker-container
ports:
- "8080:8080"
volumes:
- /data/authentica
application.properties
#cấu hình Spring Datasource, JPA, App Properties
spring.datasource.url= jdbc:mysql://my-docker-container:3306/my_app?useSSL=false
spring.datasource.username= root
spring.datasource.password= root
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate,dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto= update
spring.datasource.platform=mysql
spring.datasource.initialization-mode=always
#App
pin.app.jwtSecret = pinSecretKey
pin.app.jwtExpirationMs = 86400000
然后我通过网络将其修复
version: '3'
services:
mysql-docker-container:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my_app
volumes:
- /data/mysql
ports:
- "3306:3306"
networks:
- "my-network"
authenticate:
image: authenticate
build:
context: ./
dockerfile: Dockeerfile
depends_on:
- mysql-docker-container
ports:
- "8080:8080"
volumes:
- /data/authentica
networks:
- "my-network"
networks:
my-network:
没什么不同
答案 0 :(得分:0)
您的服务名称和连接字符串不同,您应该使用docker-compose中定义的确切服务名称或容器名称。
将连接字符串更改为
spring.datasource.url= jdbc:mysql://mysql-docker-container:3306/my_app?useSSL=false
更新:
如果连接字符串不能解决问题,则可能有两个可能的原因
由于在这种情况下depends_on:
无法解决您的问题,因此DB容器需要一些时间来接受连接。您可以使用wait-for-it或在应用程序端处理重试逻辑。