Spring Boot MySQL Docker引起的问题:Caused by: java.net.ConnectException: Connection refused (连接被拒绝)。

4

正如标题所示:

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指的是grades容器本身,所以无法使用。 - LinPy
为什么这个有效? - Mateusz Gebroski
你需要使用在compose中定义的服务名称进行连接。 - LinPy
3个回答

2

localhost 在 Docker 容器中并不是主机(Docker 容器所在的那个主机)的 localhost。基本上它指向你的 Docker 容器本身,而 MySQL 却不在其中。因此,你必须指向你的 MySQL 实例或容器主机,因为你正在将 MySQL 的 3306 端口映射到主机的 3306 端口。

就像 @LinPy 建议的那样,我肯定会指向 MySQL 本身:

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

0
在你的docker-compose.yaml文件中,mysql-standalone容器的端口映射有一个拼写错误,你需要更改如下内容:
ports:
- "33061:3306"

ports:
- "3306:3306"

0

这应该能帮助到某些人。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接