【问题标题】:Spring Boot MySQL Docker Caused by: java.net.ConnectException: Connection refused (Connection refused)Spring Boot MySQL Docker 引起:java.net.ConnectException:连接被拒绝(连接被拒绝)
【发布时间】:2020-01-19 05:05:07
【问题描述】:

如题:

Caused by: java.net.ConnectException: Connection refused (Connection refused)

前段时间这对我有用,但不幸的是现在不行。 我执行的脚本包含:

mvn clean install -> docker-compose build -> docker-compose up

Dockerfile:

FROM openjdk:8
ADD target/grades.jar grades.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "grades.jar"]

docker-compose.yaml

version: '3'

services:
  mysql-standalone:
    image: mysql:latest
    environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=grades
    - MYSQL_USER=root
    - MYSQL_PASSWORD=password
    ports:
    - "33061:3306"
    volumes:
    - /data/mysql
  grades:
    image: grades
    build:
      context: ./
      dockerfile: Dockerfile
    depends_on:
    - mysql-standalone
    ports:
    - 8080:8080
    volumes:
    - /data/grades

和application.properties:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:aws_eb_db}
spring.datasource.username=${MYSQL_USERNAME:root}
spring.datasource.password=${MYSQL_PASSWORD:password}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

【问题讨论】:

  • 试试这个:spring.datasource.url=jdbc:mysql://mysql-standalone:3306/grades localhost 将不起作用,因为它引用了等级容器本身
  • 为什么会这样?
  • 您需要使用 compose 中定义的服务名称进行连接

标签: mysql spring-boot docker


【解决方案1】:

localhost 对你来说 Docker 容器不是主机的localhost(你的 Docker 容器所在的那个)。基本上它指向你的 Docker 容器本身,MySQL 并不存在。因此,当您将 MySQL 的 3306 端口映射到主机的 3306 端口时,您必须指向您的 MySQL 实例或容器的主机。

我肯定会按照@LinPy 的建议指出 MySQL 本身:

spring.datasource.url=jdbc:mysql://mysql-standalone:3306/grades

【讨论】:

    【解决方案2】:

    这应该对某人有所帮助。

    确保运行以下命令使当前图像无效:

    docker rmi -f <your image id>
    

    version: '3.1'
    
    services:
    
      db:
        image: mariadb:10.5.5
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=root
          - MYSQL_DATABASE=softeasydb
          - MYSQL_USER=root
          - MYSQL_PASSWORD=root
        volumes:
          - ./db:/var/lib/mysql
        ports:
          - 3306:3306
        networks:
          - common-network   
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
        networks:
          - common-network
          
      api-users:
        build: .
        depends_on: 
          - db
        ports:
          - 9090:9090   
        environment:
          - SPRING_PROFILES_ACTIVE=docker
          - DATABASE_HOST=db
          - DATABASE_USER=root
          - DATABASE_PASSWORD=root
          - DATABASE_NAME=softeasydb
          - DATABASE_PORT=3306
          - SERVER_PORT=9090
        restart: always
        networks:
          - common-network
    
    networks:
      common-network:
          driver: bridge
    

    【讨论】:

      【解决方案3】:

      在您的 docker-compose.yaml 中,您在 mysql-standalone 容器的端口映射中有错字,您需要更改以下内容:

      ports:
      - "33061:3306"
      

      ports:
      - "3306:3306"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-24
        • 2021-06-24
        • 2021-06-27
        • 2023-03-21
        • 2019-06-06
        • 2015-05-18
        • 2018-06-10
        • 2017-08-10
        相关资源
        最近更新 更多