【问题标题】:Docker MySQL - cant connect SpringBoot app to MySQL database in docker container using docker-composeDocker MySQL - 无法使用 docker-compose 将 Spring Boot 应用程序连接到 docker 容器中的 MySQL 数据库
【发布时间】:2021-08-02 23:54:21
【问题描述】:

尝试连接 Springboot 应用程序 dicom_viewer: Imagename: sample 与 Mysql: Imagename: pb_mysql 在 docker 容器中运行。错误: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

Docker-compose 文件:

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"]

Database: test, table: pm_of_india

Docker images, docker ps -a

docker-compose up

Error: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

【问题讨论】:

    标签: mysql spring-boot docker docker-compose


    【解决方案1】:

    有两点需要注意,

    depends_on

    您在 yaml 配置文件中保持 pb_mysql 领先于其他人。这并不能确保 mysql-server 在其他服务器之前启动并运行。

    你要使用depends_on,所以会先启动依赖的pb_mysql。

    ports

    您使用的是桥接网络,因此您需要将 mysql-server 的 3306 映射到 3306。

    version: '2'
    services:
      patient_browser:
        container_name: patient_browser
        restart: always
        image: patient_browser
        ports: 
          - 8080:8080
        volumes:
          - ./dicom_images:/usr/src/app/dicom_images
          - 8081:8080
        depends_on:
          - pb_mysql
      springboot-image:
        container_name: dicom_viewer
        restart: always
        image: sample
        ports: 
          - 8081:8080
        depends_on: # Let mysql-server start first
          - pb_mysql
      pb_mysql:
        container_name: pb_mysql
        ports:
          - "3306:3306" # Port mapping.
        restart: always
        image: mysql/mysql-server:latest
        environment:
          MYSQL_ROOT_PASSWORD: 'root123' # TODO: Change this
        volumes:
          - sql-datavolume:/var/lib/mysql
    volumes:
      sql-datavolume:
    networks:
      f4:
        driver: bridge
    

    除非绝对需要,否则我会避免使用restart: always。

    其余的对我来说看起来不错。如果解决了,请告诉我。

    【讨论】:

    • 你解决了。我添加了你的建议。但我也在 docker-compose 中声明了 application.prop 的配置。并再次建造了罐子。它奏效了
    • @Ayush Narayan 是否已解决,因为您在 docker-compose 中声明了 profile.active=?还是别的什么?
    • 不,我没有声明。我的新 docker-compose 有: springboot-image: container_name: dicom_viewer image: sample ports: - 8081:8080 depends_on: # 让 mysql-server 先启动 - pb_mysql environment: SPRING_DATASOURCE_URL: jdbc:mysql://pb_mysql:3306/test SPRING_DATASOURCE_USERNAME : pb SPRING_DATASOURCE_PASSWORD: pb@123 pb_mysql: container_name: pb_mysql 端口: - 3306:3306 重启: 总是镜像: mysql/mysql-server: 最新环境: MYSQL_ROOT_PASSWORD: 'root123'
    • 您能否让我确切地知道哪个修改更正了docker-compose?谢谢。
    【解决方案2】:

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

    services:
      pb_mysql:
         networks:
              - f4
    
    ...
     
    

    【讨论】:

    • 所有服务都将使用 Compose 提供的 default 网络,然后由于它们都在同一个网络上,它们将能够进行通信。从文件底部删除 networks: 块会更容易。有关 default 网络的更多详细信息,请参阅 Docker 文档中的 Networking in Compose。
    猜你喜欢
    • 2020-07-12
    • 2020-06-06
    • 2016-02-19
    • 2019-10-19
    • 2021-04-22
    • 2021-04-04
    • 2023-02-23
    • 2019-04-14
    相关资源
    最近更新 更多