상황
프론트에서 백으로 요청 시 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 에러 (0) | 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 (0) | 2022.09.07 |