문제 상황
DB 컨테이너와 JAVA 컨테이너를 하나의 Compose 파일로 묶어서 관리하는 과정에서 문제가 생겼다.
문제 상황
docker-compose up 으로 컨테이너 생성 시 configweb의 Dockerfile에서 COPY 경로를 찾을 수 없다는 오류가 발생했다
오류 발생 당시 소스코드
COPY 경로를 담고 있는 변수는 JAR_FILE이므로, JAR_FILE의 경로가 잘못되었다는 의미이다.
Dockerfile Build 과정에서 설정한 context 위치는 Docker/configweb 이다.
따라서, JAR_FILE의 상대 경로 또한 Docker/configweb을 기준으로 삼으니 설정된 경로는 문제될 것이 없어보였다.
열심히 검색해본 결과.. 경로는 문제가 없었지만, context의 위치가 문제였다.
context 위치와 파일 인식
Dockerfile 내부에서 로컬의 경로를 확인할 때는 현재 build가 진행되고 있는 context의 위치를 기준으로 빌드를 진행한다.
따라서, context 하위 디렉토리와 파일만 인식하고, 상위 디렉토리는 인식을하지 못한다.
문제상황처럼 context를 /configweb 로 설정하면 configweb 하위 디렉토리만 인식을 하게 되고,
상위 폴더인 Docker, build, .idea ... 는 인식을 하지 못하는 상황이 된다.
아래 그림에서 노랗게 칠한 파일들만 인식한다.
따라서 configweb에서 상위 디렉토리로 두번 이동하는 순간(../../)부터 이미 해당 디렉토리는 인식을 하지 못했기 때문에
정상적인 경로로 보일지라도, build 파일 자체를 인식하지 못하기 때문에 jar 파일을 찾을 수 없었던 것이다.
해결 방법
위 문제되는 코드와 차이점은 context의 경로를 build, idea도 포함하는 프로젝트 기준 최상위 경로로 설정했다는 점이다.
context 경로를 최상위 폴더인 root로 두게되면, .gradle, .idea, build 등의 파일을 인식함으로써 원하는 경로에 접근할 수 있게 된다.
'트러블 슈팅' 카테고리의 다른 글
hibernate가 기존 DB 테이블을 재생성하는 문제 (0) | 2024.08.05 |
---|---|
JPA Entity 매핑 관련 오류(java.sql.SQLNonTransientConnectionException) (0) | 2024.05.27 |
DB 연동을 위한 도커 경로 설정 문제 (1) | 2024.05.27 |
[Spring webFlux] Unable to load io.netty.resolver.dns.macos ... 오류 (0) | 2024.03.28 |
파일 경로 설정과 URL 객체 인코딩 트러블슈팅 (0) | 2024.02.25 |