【问题标题】:Docker Mysql + Spring Connection RefussedDocker Mysql + Spring Connection 被拒绝
【发布时间】:2019-02-18 02:32:03
【问题描述】:

我通过 Docker 设置了一个 Mysql 服务器,在我的 IDE 中运行我的微服务时一切正常,我能够通过 连接到我的数据库

spring.datasource.url= jdbc:mysql://docker:3079/vetdb?useSSL=false

现在我想通过 Docker 测试部署我的微服务

Docker 编写

version: '3'

services:
  vetdb:
    container_name: vetdb
    hostname: vetdb
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=vetdb
      - MYSQL_PASSWORD=root
    ports:
      - 3079:3306
    volumes:
      - ./mysql-data:/var/lib/mysql

  VET:
    hostname: ${VET_HOSTNAME}
    container_name: ${VET_HOSTNAME}
    image: openjdk:8-jdk-alpine
    ports:
      - "${VET_PORT}:8080"
    volumes:
      - "/dockervolumes/microservices/VET/tmp:/tmp"
      - "./jar:/jar"
    entrypoint:
      - "java"
      - "-Djava.security.egd=file:/dev/./urandom"
      - "-jar"
      - "/jar/${VET_JAR_NAME}.jar"
    depends_on:
      - vetdb
    links:
      - vetdb:vetdb

因此我更改了数据源网址

spring.datasource.url= jdbc:mysql://vetdb:3079/vetdb?useSSL=false

现在当我运行docker-compose up --build 时,我得到Caused by: java.net.ConnectException: Connection refused (Connection refused)

Application.Properties

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url= jdbc:mysql://vetdb:3079/vetdb?useSSL=false
spring.datasource.username=root  
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.platform=mysql

我对 Docker 还很陌生,我希望有人可以帮助我。 对不起我糟糕的英语

提前打个招呼

编辑 感谢@David Maze 的解决方案! spring.datasource.url=jdbc:mysql://vetdb:3306/vetdb?useSSL=false

Docker 编写

version: '3'

services:
  vetdb:
    container_name: vetdb
    hostname: vetdb
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=vetdb
      - MYSQL_PASSWORD=root
    volumes:
      - ./mysql-data:/var/lib/mysql

  VET:
    hostname: ${VET_HOSTNAME}
    container_name: ${VET_HOSTNAME}
    image: openjdk:8-jdk-alpine
    ports:
      - "${VET_PORT}:8080"
    volumes:
      - "/dockervolumes/microservices/VET/tmp:/tmp"
      - "./jar:/jar"
    entrypoint:
      - "java"
      - "-Djava.security.egd=file:/dev/./urandom"
      - "-jar"
      - "/jar/${VET_JAR_NAME}.jar"
    depends_on:
      - vetdb

【问题讨论】:

    标签: java mysql spring docker


    【解决方案1】:

    当您使用容器名称作为主机名在容器之间进行连接时,您必须直接使用服务器正在运行的端口号。是否发布了任何端口都没有关系(docker run -p,Docker Compose ports: 行);您将使用这些行中的 second 端口号。

    在您的情况下,这意味着使用标准 MySQL 端口 3306(即使您已发布到主机上的不同端口)

    jdbc:mysql://vetdb:3306/vetdb?useSSL=false
    

    【讨论】:

    • 非常感谢!最后我使用spring.datasource.url= jdbc:mysql://vetdb:3306/vetdb?useSSL=false&allowPublicKeyRetrieval=true 让它毫无例外地启动:) 你能不能告诉我如何优化我的docker-compose文件?有什么我可以改进的吗?任何最佳做法?这对我来说是全新的,我想尽可能多地学习
    猜你喜欢
    • 2019-06-06
    • 2020-01-19
    • 2021-06-24
    • 1970-01-01
    • 2020-07-04
    • 2020-10-07
    • 2018-06-08
    • 2016-03-08
    • 2020-10-08
    相关资源
    最近更新 更多