njsh4261 / SGS_Last_Punch

SGS 2021 Dev Camp 2nd Team Last Punch
11 stars 2 forks source link

docker-compose 이슈 #73

Closed chahtk closed 2 years ago

chahtk commented 2 years ago

에러 1

image

에러 2

분석

시도1

VOLUME /tmp

RUN mkdir -p /spring WORKDIR /spring ADD . /spring

RUN ./gradlew build

EXPOSE 8081

- `docker build -t spring:test .`
- 결과: 도커 내에 jar 파일은 만들어졌습니다 
![image](https://user-images.githubusercontent.com/44664867/149445275-7e7f7cfe-cd98-4d79-a835-f0673b143a49.png)

### 시도 2
- authServer 폴더의 도커파일 마지막 줄에 `ENTRYPOINT ["java","-jar","build/libs/authServer-0.0.1-SNAPSHOT.jar"]` 을 추가
- 컨테이너 멈춤
- 마지막줄에 추가한 것을 주석처리하고, 시도1의 컨테이너에서 명령어 입력해도 에러가뜸 -> 코드 상 문제인듯
- 예상원인: mysql server의 부재 -> 해당 코드를 주석처리하고 성공한다면 authServer 자체는 앞으로 `git pull`과 도커 빌드만으로 정상 동작하는 것이 보장됨
- or mysql 컨테이너 실행 -> 시도3

### 시도 3
- mysql과 authServer 동시 실행을 위해 `docker-compose.yml` 수정
- authServer의 도커파일은 `ENTRYPOINT ["java","-jar","build/libs/authServer-0.0.1-SNAPSHOT.jar"]` 가 있는 상태

version: '3' services: mysql: image: mysql:8.0

volumes:

- ./db/conf.d:/etc/mysql/conf.d

- ./db/data:/var/lib/mysql

- ./db/initdb.d:/docker-entrypoint-initdb.d

env_file: .env

environment:
  MYSQL_DATABASE: lastpunch
  MYSQL_ROOT_PASSWORD: 1234
  MYSQL_ROOT_HOST: '%'
  TZ: Asia/Seoul
volumes:
  - ./db/initdb.d:/docker-entrypoint-initdb.d
ports:
  - "3306:3306"
expose:
  - "3306"
networks:
  - spring-boot-mysql-network

auth-server: build: ./authServer ports:

networks: spring-boot-mysql-network: driver: bridge



### 시도3 결과
![image](https://user-images.githubusercontent.com/44664867/149448027-d7e8694c-285c-46bd-9d85-c44011664dee.png)
- docker desktop으로 본 log
[log.txt](https://github.com/njsh4261/SGS_Last_Punch/files/7867686/log.txt)
- 내가 찾은 문제: docker에 띄울때 mysql server의 ip가 고정되지 않는다. 내 mysql ip는 `172.18.0.2`인데, 로그를 보니 `172.18.0.3`으로 설정되어있는 것 같다
- 이는 mysql 뿐 아니라 앞으로 사용될 모든 api 서버들 역시 문제될 수 있음

### ㅠㅠ
- 지수님의 feat/auth/authentication 브랜치를 기반으로 수정하여, fix/auth/docker 브랜치를 생성해 뒀습니다
- log에 뭐가 막 뜨는데 spring 알 못이라 잘 모르겠네용 ㅠㅠ
chahtk commented 2 years ago

*** 지수님, src안의 test 파일이 문제를 일으키는 것 같아 삭제하면서 테스트하고있는데 얘는 뭐하는친군가용?

chahtk commented 2 years ago

하면서 알게 된 점: run 후에 컨테이너가 바로 멈추는 경우 안꺼지게 하기 위해서는 별도의 커맨드 필요! (bash or nginx, ...)

chahtk commented 2 years ago

ip issue -> 도커는 locla port와 연결되어 있음. 따라서 코드 상에서 도커에 올린 api에 대한 주소를 localhost:설정포트 로 하면 어떨까 합니다

SooKim1110 commented 2 years ago

도커 관련된 시도들 정리해주셔서 감사합니다 효준님!

1. (!!feat/auth/authentication 브랜치에 push 해뒀습니다!!) 일단, 이전에 말씀드린 dockerhub에 이미지들을 올리는 방식으로 docker-compose.yml을 수정했습니다. (추후 효준님이 작성해주신 fix/auth/docker 에 있는 dockerfile 기반으로 이미지 pull이 아닌 도커 빌드만으로 실행될 수 있도록 수정하겠습니다.)

2. 실행 방법은 아래 경로의 리드미를 참고하시면 됩니다. (회사 노트북에 도커 설치해서 동작 확인하긴 했는데 혹시나 오류가 또 생기면 연락주세요!) https://github.com/njsh4261/SGS_Last_Punch/tree/feat/auth/authentication/src/backend

3. 인증 로직도 효준님께서 말씀해주신 먼저 access token으로 요청을 보내보고 401이 오면 refresh token으로 access token을 재발급받는 방식으로 수정하였습니다. 토큰 종류 상관없이 똑같이 헤더 "X-AUTH-TOKEN"에 토큰값 넣어서 요청하시면 됩니다.

4. 인증이 잘 되는지 확인하기 위해 테스트 API /auth/verify를 만들었고, 토큰 재발급은 /auth/reissue 로 요청하시면 됩니다.

/signup -> /login ->(access token값을 헤더에 넣어서) /auth/verify ->(refresh token값을 헤더에 넣어서) /auth/reissue 순서로 테스트해보시면 좋을 것 같습니다! 리드미에 API문서도 수정하여 올려놨습니다. (참고로 이메일 인증과 redis 토큰 저장은 아직 구현하지 않았습니다.)

이번엔 오류없이 무사히 잘 실행되길 바라요🤞!!