본문 바로가기
프로젝트/낙낙(KnockKnock)

배포를 해볼까-3

by 티코딩 2023. 7. 17.

저번포스팅에 이미지 푸쉬까지 다 했다면 이제는 EC2 인스턴스에 접속한 뒤, 도커 컨테이너를 실행해보자.

 

ㅇ EC2에서 도커 컨테이너 실행

먼저 나는 로그인을 해줬다.

로그인을 해 준 뒤, pull로 땡겨왔다. 땡겨오는데 사용자 이름 안적었다가 한참이 걸렸다.ㅠㅠ

이제 드디어 run 해보려고했더니...

오류를 보니 내가 만든 이미지가 linux이고, 내 인스턴스는 ubuntu라서 호환이 안되는거였다... 으아악!!!!!

내가 dockerfile에 FROM으로 썼던 openjdk는 linux 기반이미지라고 한다.

그래서 바꾸고 다시 해봐야겠다. 난 ubuntu 기반 이미지를 만들어야 하니 FROM ubuntu:latest 이렇게 바꿔서 해봐야겠다.

다시 처음부터 해야하는가..? 멘탈이 흔들렸다.

다시 해봤는데도 이미지가 linux로 만들어졌다..

저 사악한 펭귄...

그런데 주변에물어물어 보니 OS가 달라도 상관없다는 얘길듣고, 다시 EC2에서 해보았다.

docker run -d -p <호스트 포트>:<컨테이너 포트> <이미지명>

이 명령어를 입력해보니, 위와같은 에러가 발생했다. 알아보자!(gpt에게 물어보자.)

  • "WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested"라는 경고는 도커 이미지의 플랫폼과 호스트 시스템의 플랫폼이 일치하지 않아서 발생하는 문제입니다. 도커 이미지가 ARM64 아키텍처용으로 빌드되었으며, 호스트 시스템은 x86_64 (amd64) 아키텍처인 것으로 감지되었습니다. 이는 아키텍처 불일치로 인해 도커 컨테이너가 실행되지 않을 수 있는 문제입니다.

해결 방법으로는 호스트 시스템과 도커 이미지의 플랫폼을 일치시키는 것이 좋습니다. 호스트 시스템의 아키텍처에 맞는 도커 이미지를 사용하거나, 호스트 시스템의 아키텍처에 맞는 도커 이미지를 빌드하여 사용해야 합니다.

  • "docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: 'java': executable file not found in $PATH: unknown."라는 오류는 컨테이너 안에서 Java 실행 파일을 찾을 없어서 발생하는 문제입니다. 이는 도커 이미지 안에 Java 설치되어 있지 않거나, Java 실행 파일의 경로가 올바르게 설정되지 않았을 경우 발생할 있습니다.

문제는 두가지. 도커 이미지 플랫폼과 호스트시스템 플랫폼이 일치하지 않는문제, 그리고 도커 컨테이너에 Java가 설치되지 않은문제.

해결해보자!

먼저 EC2 인스턴스에서 uname -m 명령어를 입력한다.

x86_64면 현재 amd64를 사용중이다.

도커 이미지 플랫폼은 ARM 64로 빌드되었다. 호스트 시스템의 아키텍처에 맞는 이미지를 사용하라고 한다.

즉, 다시만들어야 한다.

하..amd64로 다시 만들어야한다!

해보자. dockerfile을 아래와 같이 수정한다.

그다음, ./gradlew clean build 로 빌드하고,

 docker build -t myimage:v1 .  이렇게 이미지를 빌드하고,

docker create myimage:v1,
 docker tag myimage:v1 taehyungee/myimage:v1,

 docker push taehyungee/myimage:v1
하면, docker hub에 레포지토리와 이미지가 푸시된걸 볼 수 있다. 

확인해봤는데...

여전히 arm64????????????

하..왜이러는걸까? 지피티에게 물어보니..

도커 빌드 컨텍스트에 이전에 빌드된 이미지 캐시가 남아있음

이라고 한다. 아..진작알려주지

그렇게 돼서 다시 캐시를 지워보고 다시! 만들어보자.

위와 동일하지만

docker build --no-cache -t myimage:v1
이렇게 --no-cache를 붙혀준다.

다시해본결과...!

.....

미치겠다...

.....

??????

이게 무슨말??

 

나는 다른 방법을 찾기로 했다..!

바로바로 dockerfile을 추가하고, git push 한뒤 EC2에서 clone 받는것이다..!

그렇게 EC2에다가 clone받고, 빌드를 하려는데..!

COPY failed라니..왜지?싶어서 보니,
dockerfile에서 실제로 JAR파일이 위치한 경로에 파일이 없다고 한다.
다시보니, jar파일은 build폴더안에 libs 안에 있는데, build폴더 자체가 gitignore에 포함되어있어서, git으로 clone받으면 build폴더가 없어서 발생한 문제였다.

와우!!

그래서 gitignore를 수정해서, build폴더 안에 libs폴더만 제외시키려고 했지만, 부분적으로 제외시키기는 방법은 없다고 한다.
자꾸 된다고 gpt가 알려줘서 2시간을 날렸다! 하하하

멘탈이 나간다.

다음 포스팅에 이어서 해봐야 겠다.

 

 

 

 

 

 

ㅇㅇ

'프로젝트 > 낙낙(KnockKnock)' 카테고리의 다른 글

배포를 해볼까-5  (0) 2023.07.21
배포를 해볼까-4  (0) 2023.07.18
배포를 해볼까-2  (0) 2023.07.14
배포를 해볼까-1  (0) 2023.07.14
도커를 써볼까  (0) 2023.07.10