为什么我不能通过Docker-compose将spring-boot容器连接到mysql sql容器?

时间:2019-12-16 03:23:00

标签: docker docker-compose

如何将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

This's my result

然后我通过网络将其修复

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:

没什么不同

1 个答案:

答案 0 :(得分:0)

您的服务名称和连接字符串不同,您应该使用docker-compose中定义的确切服务名称或容器名称。

将连接字符串更改为

spring.datasource.url= jdbc:mysql://mysql-docker-container:3306/my_app?useSSL=false

更新:

如果连接字符串不能解决问题,则可能有两个可能的原因

由于在这种情况下depends_on:无法解决您的问题,因此DB容器需要一些时间来接受连接。您可以使用wait-for-it或在应用程序端处理重试逻辑。

相关问题