문제 상황
로컬(Mac M1)에서 Docker로 만든 이미지는 정상 실행됐음.
하지만 docker save로 저장 후 다른 서버에 옮겨서 docker load를 하자 다음과 같은 오류 발생:

해결과정
1. tar 파일 깨짐 의심
에러메시지를 구글링 해봤을 때, 가장 많이 나오는 원인은 ASCII 모드 전송으로 파일이 깨지는 경우이고, 추천 해결 방법은 아래와 같음.
https://stackoverflow.com/questions/40622162/docker-load-and-save-archive-tar-invalid-tar-header
하지만 나는 -o, -i 옵션 사용했고, binary 모드 전송도 확인했기 때문에 해당 문제 아니었음
2. 런타임 환경변수 주입 실패
Dockerfile의 FROM 절에 들어가는 기본 이미지 변경
- FROM openjdk:17 로 수정
- 그랬더니 아래와 같은 에러 발생

위 에러 발생 원인이 도커를 빌드할 때, application.yml 파일을 읽지 못해 ${session.count}와 같은 값을 읽지 못하여 형변환 불가능하다고 생각했음.
3. 아키텍처 불일치 의심
에러 메시지에 OS 관련 내용 포함돼 있었고, 로컬(M1, arm64)과 서버(x86_64)의 아키텍처가 달랐음.
M1에서 빌드한 이미지를 그대로 서버에서 실행하려다 호환성 이슈가 발생한 것으로 판단.
해결 방법: 플랫폼 지정해서 빌드
다음과 같이 --platform linux/amd64 옵션 붙여서 이미지 재빌드함:
docker build --platform linux/amd64 -t simulator:v1.0.4 .
docker save -o simulator.tar simulator
이후 해당 simulator.tar 파일을 ftp 로 옮김
옮긴 서버에서,
docker load -i simulator.tar
로 이미지 푼 후,
docker images
에서 해당 이미지 존재하는지 확인
docker run
을 통해 정상 동작 확인
이번 문제는 단순 파일 손상 문제가 아니었고, M1 맥에서 빌드한 이미지의 아키텍처 차이로 인한 실행 오류였음.
특히 Java 기반 앱에서 환경변수가 주입되지 않으면서 생기는 런타임 에러도 알게 되었음.
앞으로 체크할 것들:
- M1에서 Docker 빌드 시, --platform linux/amd64 명시
- 환경변수 주입 확인 (-e, application.yml, @Value)
'Study' 카테고리의 다른 글
카카오 소셜 로그인 과정 (0) | 2024.09.17 |
---|---|
H2 DB 설치 및 사용 방법 (0) | 2022.06.16 |
문제 상황
로컬(Mac M1)에서 Docker로 만든 이미지는 정상 실행됐음.
하지만 docker save로 저장 후 다른 서버에 옮겨서 docker load를 하자 다음과 같은 오류 발생:

해결과정
1. tar 파일 깨짐 의심
에러메시지를 구글링 해봤을 때, 가장 많이 나오는 원인은 ASCII 모드 전송으로 파일이 깨지는 경우이고, 추천 해결 방법은 아래와 같음.
https://stackoverflow.com/questions/40622162/docker-load-and-save-archive-tar-invalid-tar-header
하지만 나는 -o, -i 옵션 사용했고, binary 모드 전송도 확인했기 때문에 해당 문제 아니었음
2. 런타임 환경변수 주입 실패
Dockerfile의 FROM 절에 들어가는 기본 이미지 변경
- FROM openjdk:17 로 수정
- 그랬더니 아래와 같은 에러 발생

위 에러 발생 원인이 도커를 빌드할 때, application.yml 파일을 읽지 못해 ${session.count}와 같은 값을 읽지 못하여 형변환 불가능하다고 생각했음.
3. 아키텍처 불일치 의심
에러 메시지에 OS 관련 내용 포함돼 있었고, 로컬(M1, arm64)과 서버(x86_64)의 아키텍처가 달랐음.
M1에서 빌드한 이미지를 그대로 서버에서 실행하려다 호환성 이슈가 발생한 것으로 판단.
해결 방법: 플랫폼 지정해서 빌드
다음과 같이 --platform linux/amd64 옵션 붙여서 이미지 재빌드함:
docker build --platform linux/amd64 -t simulator:v1.0.4 .
docker save -o simulator.tar simulator
이후 해당 simulator.tar 파일을 ftp 로 옮김
옮긴 서버에서,
docker load -i simulator.tar
로 이미지 푼 후,
docker images
에서 해당 이미지 존재하는지 확인
docker run
을 통해 정상 동작 확인
이번 문제는 단순 파일 손상 문제가 아니었고, M1 맥에서 빌드한 이미지의 아키텍처 차이로 인한 실행 오류였음.
특히 Java 기반 앱에서 환경변수가 주입되지 않으면서 생기는 런타임 에러도 알게 되었음.
앞으로 체크할 것들:
- M1에서 Docker 빌드 시, --platform linux/amd64 명시
- 환경변수 주입 확인 (-e, application.yml, @Value)
'Study' 카테고리의 다른 글
카카오 소셜 로그인 과정 (0) | 2024.09.17 |
---|---|
H2 DB 설치 및 사용 방법 (0) | 2022.06.16 |