首页 > 解决方案 > docker-compose 与 Spring Boot 和 MySQL 集成不断发生错误通信链接失败

问题描述

我即将完成我的春季启动项目。

但是,使用 docker-compose 的部署只是痛苦地不起作用

下面是我的代码

码头工人-compose.yml

version: '3'
services:

  ibin-db:
    container_name: ibin-db
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: iBinApiDB
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOST: '%'
    ports:
      - 3306:3306

  ibin-inplay:
    image: openjdk:14
    volumes:
      - ./run.sh:/home/ibin/run.sh
      - ./ibin-inplay/build/libs:/home/ibin/libs
    ports:
      - 8001:8080
      - 16100:16100
    networks:
      vpcbr:
        ipv4_address: 192.168.219.69
    depends_on:
      - ibin-db
    command: bash -c "cd /home/ibin && sh run.sh"

  networks:
      vpcbr:
        driver: bridge
        ipam:
          config:
            - subnet: 192.168.219.0/24

应用程序.yml

spring:
    datasource:
        url: jdbc:mysql://ibin-db:3306/iBinApiDB?useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
    jpa:
        hibernate:
            ddl-auto: update
        database-platform: org.hibernate.dialect.MySQL5Dialect
        generate-ddl: true

不错过运行 ./gradlew bootJar

但是,无论如何都会弹出错误。

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

请帮我解决这个问题。

标签: mysqlspring-bootdocker-compose

解决方案


这两个容器不在同一个 Docker 内部网络上,所以它们不能互相看到。容器被ibin-inplay显式分配给vpcbr网络;容器ibin-db没有任何手动networks:配置,因此 Compose 将其分配给default网络。 Compose 中的网络描述了 Compose 将自动为您创建的内容。

您不需要手动为容器分配 IP 地址或以其他方式在 Docker 中进行手动网络配置。我建议删除networks:整个文件中的所有块(顶级块和ibin-inplay容器块)并在default任何地方使用网络。


推荐阅读