Docker Mysql + Spring连接被拒绝

问题描述 投票:1回答:1

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

spring.datasource.url= jdbc:mysql://docker:3079/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
    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

因此我更改了数据源URL

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的新手,我希望这里有人可以帮助我。对不起,我的英语很恐怖

Ty提前

编辑感谢@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个回答
3
投票

使用容器名称作为主机名连接容器时,必须直接使用服务器运行的端口号。是否已发布任何端口并不重要(docker run -p,Docker Compose ports: line);你会使用这些行中的第二个端口号。

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

jdbc:mysql://vetdb:3306/vetdb?useSSL=false
© www.soinside.com 2019 - 2024. All rights reserved.