mysql 컨테이너가 먼저 빌드되어야 springboot에서 mysql을 연결할 수 있다.
그러나 springboot가 먼저 빌드되어서 mysql을 연결하지 못하는 이슈가 발생했다.
docker-compose.yml에서 depends_on 옵션으로 설정할 수 있다고 생각하지만 depends_on 옵션
은 빌드 시작 순서를 정해주는 것
이지 빌드가 끝나는 순서를 정해주는게 아니다.
mysql이 빌드되기 전까지 springboot의 빌드를 대기시킨다.
FROM gradle:7.6-jdk17 as build
ENV APP_HOME=/apps
WORKDIR $APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME
COPY gradle $APP_HOME/gradle
RUN chmod +x gradlew
RUN ./gradlew build || return 0
COPY src $APP_HOME/src
RUN ./gradlew clean build
FROM openjdk:17.0.2-jdk
ENV APP_HOME=/apps
ARG ARTIFACT_NAME=app.jar
ARG JAR_FILE_PATH=build/libs/fm-studio-0.0.1-SNAPSHOT.jar
WORKDIR $APP_HOME
COPY --from=build $APP_HOME/$JAR_FILE_PATH $ARTIFACT_NAME
EXPOSE 8080
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /wait
RUN chmod +x /wait
CMD /wait && java -jar app.jar
backend:
container_name: backend
build: ./backend/
ports:
- "8080:8080"
environment:
WAIT_HOSTS: mysql:3306
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?createDatabaseIfNotExist=true&characterEncoding=UTF-8&profileSql=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: ${MYSQL_USER}
SPRING_DATASOURCE_PASSWORD: ${MYSQL_PASSWORD}
SPRING_JPA_HIBERNATE_DDL_AUTO: update
depends_on:
- mysql
networks:
- fmstudio