반응형
은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (97)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (45)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (5)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화
IT/프로젝트 개발 중 발생한 에러

도커컴포즈 + 스프링부트 + nginx + mysql connection refused

IT/프로젝트 개발 중 발생한 에러

도커컴포즈 + 스프링부트 + nginx + mysql connection refused

2022. 9. 26. 23:52
반응형

상황

프론트에서 백으로 요청 시 400 에러가 발생했다. Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

에러와 함께 Connection refused에러도 함께 발생했다.

 

시도해본 방법

spring.datasource.url=jdbc:mysql://mysql_chu:3303/chuanione?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul

mysql_chu는 도커컴포즈의 컨테이너 이름이다. 로컬에서 테스트할 땐 mysql_chu대신 서버 도메인 주소를 넣었고 저 자리에 다양한 값들을 넣어보고 도커컴포즈의 설정값도 변경해봤다.

 

같은 에러가 발생한다면 우선 mysql_chu에 서버 url을 넣어서 작동하는지 확인부터 하자. 나같은 경우에는 서버url을 넣으면 작동했다. 다만 이렇게 한다면 요청을 두 번 하기 때문에 올바른 방법은 아니다.

 

도커 컴포즈 설정

version: "3.7"

services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./frontend/build:/usr/share/nginx/html
      - /var/nginx/log:/log
    container_name: nginx_chu
    depends_on:
      - spring-boot

  react:
    image: node:12-alpine
    command: sh -c "npm ci && npm run build"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./frontend:/app
    container_name: react_chu

  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: master
      MYSQL_DATABASE: chuanione
      MYSQL_PASSWORD: 1234
      MYSQL_ROOT_PASSWORD: 1234
      TZ: Asia/Seoul
    volumes:
      - "./db_data:/var/lib/mysql"
    ports:
      - "3303:3306"
    container_name: mysql_chu


  spring-boot:
    build:
      context: ./backend/chuanione
      dockerfile: Dockerfile
    image: boot_chu
    ports:
      - "8080:8080"
    container_name: boot_chu
    restart: always
    depends_on:
      - db

 

도커컴포즈에서 network설정도 추가해봤지만 소용없었다.

 

해결

application.properties의 포트를 3306으로 변경하면 해결된다.

도커 컴포즈에서 설정한 MySql 포트는 아래와 같다. ports 3303:3306 여기서 3303은 외부에서 들어올 때 사용하는 포트고 3306은 도커 내부에서 사용할 때 쓰는 포트다. Spring boot의 application.properties는 외부에서 DB에 접속해야 하니 3303 포트를 사용할 줄 알았는데 아니었다. DB와 백엔드 모두 도커 내부끼리 공유되는 상황이어서 도커 내부에서 사용하는 포트인 3306을 적어야 했다.

 

 

문제를 해결하는데 정보가 굉장히 없었다. 원인을 분석해보니 특별한 문제가 없다면 ports 3306:3306을 사용하기에 포트 설정에서 문제가 발생할 확률이 작았을 것이다.

반응형
저작자표시 (새창열림)

'IT > 프로젝트 개발 중 발생한 에러' 카테고리의 다른 글

도커컴포즈 + 스프링부트 + nginx + react 404 에러  (3) 2022.09.26
DockerCompose + SpringBoot + Mysql Connection refuse에러  (0) 2022.09.22
스프링시큐리티 + JWT 로그인 시 토큰 유효성검사 에러  (0) 2022.09.19
스프링시큐리티 401에러와 body가 빈 상태코드 200리턴  (0) 2022.09.16
AWS EC2 서버 이전시 발생한 이슈들 -SQLGrammarException: could not extract Result Set  (1) 2022.09.07
  • 상황
  • 시도해본 방법
  • 해결
'IT/프로젝트 개발 중 발생한 에러' 카테고리의 다른 글
  • 도커컴포즈 + 스프링부트 + nginx + react 404 에러
  • DockerCompose + SpringBoot + Mysql Connection refuse에러
  • 스프링시큐리티 + JWT 로그인 시 토큰 유효성검사 에러
  • 스프링시큐리티 401에러와 body가 빈 상태코드 200리턴
은세고화
은세고화

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.