반응형
상황
로컬에서 테스트를 한 뒤 서버에 푸시를 하고 프론트에서 백으로 요청을 보내면 404에러가 발생했다. 404에러면 url이 잘못된건데 눈씻고 찾아봐도 잘못된 url이 보이지 않았다.
시도해본 방법
굉장히 많은 방법을 시도했지만 기억나는 것만 서술하겠다.
package.json에 proxy 추가
"proxy": "http://{스프링 도커 컨테이너 이름}:8080",
또는 서버 url
axios경로에는 서버url 설정
baseURL: "http://{url}/api/v1/",
nginx.conf
location /api {
proxy_pass http://백엔드도커컨테이너 이름:8080;
그 외에 도커컴포즈파일들을 이리저리 만져보고 network도 추가해봤다.
최종 docker-conpose.yml
services:
nginx:
image: nginx
ports:
- 80:80
volumes:
- ./nginx:/etc/nginx/conf.d
- ./frontend/build:/usr/share/nginx/html
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: chu
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
TZ: Asia/Seoul
volumes:
- "./db_data:/var/lib/mysql"
ports:
- "3305: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
해결
문제의 원인은 빌드된 파일이 도커에 등록되지 않아서다.
부트를 도커컴포즈가 빌드할 때 ./gradlew build 커맨드가 없다.
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=build/libs/chuanione-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
수동으로 자바파일을 빌드를 해줬다. 빌드했다가 끝난게 아니다.
도커컴포즈는 이미지파일에 변동이 없으면 기존에 만들어놨던 이미지를 불러온다. <- 이것 때문에 빌드를 했는데도 변화가 없어서 굉장히 오랜시간 걸렸다.
도커컴포즈를 실행할 때 초기화한 뒤 다시 빌드하라는 명령어를 써서 빌드해야한다.
docker-compose up --build --force-recreate -d
반응형
'IT > 프로젝트 개발 중 발생한 에러' 카테고리의 다른 글
도커컴포즈 + 스프링부트 + nginx + mysql connection refused (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 |