Summary
- container 실행 시, application-prod.yml의 jpa.hibernate.ddl-auto(create-drop) 설정이 적용되지 않아 DB table이 초기화 되지 않는 문제 발생
Describe
docker-compose-prod.yml
version: '3.8'
services:
app:
image: ${APP_IMAGE} # TODO 배포 시 .env 추가
build: .
restart: always
ports:
- "${APP_LOCAL_PORT}:${APP_SERVER_PORT}"
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL} # TODO 배포 시 .env 추가
SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME}
SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD}
env_file:
- .env
application-prod.yml (배포 서버에서 vi로 수정)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${SPRING_DATASOURCE_URL}
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
jpa:
open-in-view: false
show-sql: true
hibernate:
ddl-auto: create-drop
properties:
hibernate:
format_sql: true
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
.env
APP_IMAGE = backend
SPRING_DATASOURCE_URL = jdbc:mysql://[RDS Endpoint]:3306/allercheck _db
SPRING_DATASOURCE_USERNAME = allercheck
SPRING_DATASOURCE_PASSWORD = allercheck!
SPRING_PROFILES_ACTIVE = prod
APP_LOCAL_PORT = 8080
APP_SERVER_PORT = 8080
- ddl-auto 옵션이 반영되지 않고 DB의 table의 데이터가 그대로 보존되어 있음
Solution
- 배포 서버에서 실행중인 컨테이너를 완전히 종료시키고, 기존에 docker-compose-prod 실행으로 생성된 images까지 제거하여 다시 실행
sudo docker ps -a // docker container 정보 조회
sudo docker stop // <container name or id>
sudo docker rm // <container name or id>
sudo docker images // docker images 정보 조회
sudo docker rmi <image name> // docker images 삭제
Etc
Summary
Describe
docker-compose-prod.yml
application-prod.yml (배포 서버에서 vi로 수정)
.env
Solution
Etc