Docker MySQL-无法使用Docker compose将SpringBoot应用程序连接到Docker容器中的MySQL数据库

Docker MySQL-无法使用Docker compose将SpringBoot应用程序连接到Docker容器中的MySQL数据库,mysql,spring-boot,docker,docker-compose,Mysql,Spring Boot,Docker,Docker Compose,正在尝试将Springboot应用程序dicom_viewer:Imagename:示例连接到docker容器中运行的Mysql:Imagename:pb_Mysql。错误:com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障 Application.properties文件: #MySQL database connection strings spring.datasource.url=jdbc:mysql://pb_mysq

正在尝试将Springboot应用程序dicom_viewer:Imagename:示例连接到docker容器中运行的Mysql:Imagename:pb_Mysql。错误:com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障

Application.properties文件:

#MySQL database connection strings
spring.datasource.url=jdbc:mysql://pb_mysql:3306/test?autoReconnect=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=pb
spring.datasource.password=pb@123

#JPA property settings
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true
version: '2'
services:
  pb_mysql:
    container_name: pb_mysql
    restart: always
    image: mysql/mysql-server:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'root123' # TODO: Change this
    volumes:
      - sql-datavolume:/var/lib/mysql
  patient_browser:
    container_name: patient_browser
    restart: always
    image: patient_browser
    ports: 
      - 8080:8080
    volumes:
      - ./dicom_images:/usr/src/app/dicom_images
  springboot-image:
    container_name: dicom_viewer
    restart: always
    image: sample
    ports: 
      - 8081:8080
volumes:
  sql-datavolume:
networks:
  f4:
    driver: bridge
Docker编写文件:

#MySQL database connection strings
spring.datasource.url=jdbc:mysql://pb_mysql:3306/test?autoReconnect=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=pb
spring.datasource.password=pb@123

#JPA property settings
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true
version: '2'
services:
  pb_mysql:
    container_name: pb_mysql
    restart: always
    image: mysql/mysql-server:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'root123' # TODO: Change this
    volumes:
      - sql-datavolume:/var/lib/mysql
  patient_browser:
    container_name: patient_browser
    restart: always
    image: patient_browser
    ports: 
      - 8080:8080
    volumes:
      - ./dicom_images:/usr/src/app/dicom_images
  springboot-image:
    container_name: dicom_viewer
    restart: always
    image: sample
    ports: 
      - 8081:8080
volumes:
  sql-datavolume:
networks:
  f4:
    driver: bridge
Dockerfile:

FROM openjdk:8-jdk-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY ./target/springboot-image-0.0.1-SNAPSHOT.jar /usr/src/app

COPY . /usr/src/app

EXPOSE 8080

ENTRYPOINT ["java","-jar","springboot-image-0.0.1-SNAPSHOT.jar"]


您没有引用您的网络。 尝试将其添加到您的服务中,即:

services:
  pb_mysql:
     networks:
          - f4

...
 

有两件事需要注意

取决于
您在yaml配置文件中保持了pb_mysql的领先地位。这并不能确保mysql服务器比其他服务器先启动和运行

您想使用
dependent\u on
,因此将首先启动dependent
pb\u mysql

端口
您使用的是桥接网络,所以需要将mysql服务器的3306映射到3306

版本:“2”
服务:
病人浏览器:
容器名称:患者浏览器
重新启动:始终
图像:患者浏览器
端口:
- 8080:8080
卷数:
-./dicom\u图像:/usr/src/app/dicom\u图像
- 8081:8080
取决于:
-pb_mysql
springboot映像:
容器名称:dicom\U查看器
重新启动:始终
图片:样本
端口:
- 8081:8080
取决于:#让mysql服务器先启动
-pb_mysql
pb_mysql:
容器名称:pb\U mysql
端口:
-“3306:3306”#端口映射。
重新启动:始终
图片:mysql/mysql服务器:最新版本
环境:
MYSQL_ROOT_密码:“root123”#TODO:更改此密码
卷数:
-sql数据量:/var/lib/mysql
卷数:
sql数据卷:
网络:
f4:
司机:驾驶台
我会避免使用
restart:always
,除非我绝对需要它


其余的我觉得不错。如果问题得到解决,请告诉我。

所有服务都将使用Compose提供的
默认网络,因为它们都在同一网络上,所以它们将能够通信。从文件底部删除
网络:
块会更容易。有关默认网络的更多详细信息,请参阅Docker文档。我补充了你的建议。但我也在docker compose中声明了application.prop的配置。然后又造了一个罐子。而且worked@AyushNarayan是否因为您在docker compose中声明了
profile.active=
而解决了此问题?或者别的什么?不,我没有申报。我的新docker compose有:springboot映像:容器名称:dicom查看器映像:示例端口:-8081:8080取决于:#让mysql服务器先启动-pb_mysql环境:SPRING_数据源\u URL:jdbc:mysql://pb_mysql:3306/test SPRING\u数据源\u用户名:pb SPRING\u数据源\u密码:pb@123 pb_mysql:container_name:pb_mysql端口:-3306:3306重新启动:始终映像:mysql/mysql服务器:最新环境:mysql_ROOT_密码:'root123'您能告诉我是哪个修改更正了docker compose
?谢谢