Infra/Open Source

[K8S] 파드 CreateContainerError 오류 해결

헹창 2024. 1. 30.
반응형

스펙

  • SpringBoot 2.7.16
  • openjdk11

상황

Failed | Error: Error Response from daemon: No command specified

스프링부트 프로젝트를 Docker 로 감싸 gitlab-ci.yaml 구성하여 K8S 컨테이너에 올리는 과정 중 발생한 오류이다.

 

사실 위의 오류가, 지금 작성하는 필자의 원인만 있는 것은 아니다.

컨테이너 구동하기 위해 실행되는 명령어에 있어 문제가 있을 때 발생하는 것 같은데, 나와 동일한 트러블 슈팅한 내용을 찾지 못했어서..

 

혹시라도 동일한 원인이 있을 경우 도움이 될까 싶어 기록한다.

배포 프로세스

먼저 전체적인 CI/CD 배포 구성한 과정을 요약하자면 다음과 같다.

  • girlab-ci.yaml : 프로젝트에서 설정한 Dockerfile 빌드 및 이미지 push (Harbor 저장소)
  • ArgoCd : push 된 이미지 자동 배포

이미지 빌드 및 저장소 밀어넣기 까지는 정상적으로 동장하였으나, 문제는 ArgoCd 에서 발생했다.

컨테이너가 구동되면서 이미지를 제대로 읽지 못한다고 생각했다.

 

처음에는 도커이미지의 문제라고 생각해서, Harbor 저장소에 올라간 도커 이미지를 로컬 PC에 내려받아서 구동시켜 보았다.

docker run -itd --name app -p 1015:1015 registry.haenny.com/app:latest /opt/java/openjdk/bin/java -jar /app.jar

 

로컬에서는 정상적으로 구동되는 것을 보니, 도커 이미지에는 문제가 없는 것 같다.

 

사실 저기까지 과정에서도 굉장히 많은.. 이슈가 있었지만, ..

아무튼!! 

 

도커 실행을 못시키는 것 같아서, 컨테이너 구동 시 실행시킨다는 명령어를 Dockerfile 에서 다음과 같이 설정했었다

너무 요약되어있지만,, java path 를 제대로 못찾는 것 같아 실제 bin 이 있는 위치로 실행시켜보려고 시도해본 것들이다

CMD ["java","-jar","./app.jar"]
CMD ["/opt/java/openjdk/bin/java","-jar","./app.jar"]
ENTRYPOINT ["java","-jar","./app.jar"]
ENTRYPOINT ["/opt/java/openjdk/bin/java","-jar","./app.jar"]

해결? (이라 말하기 부끄러운)

도커이미지를 실행시켜야한다는 생각에 위처럼 Dockerfile CMD , ENTRYPOINT 속성 부분만 고집해서 수정했었는데,

컨테이너가 도커 엔진 위에 올라간 것이 아니라서 CMD가 안먹힌건지(?)는 잘 모르겠다..

 

K8S deployments 설정에서 yaml 파일을 수정해주면 된다

contianers:
	- command:
		- /opt/java/openjdk/bin/java
		- '-jar'
		- app.jar

 

K8S 위에서 컨테이너가 돌아가다보니, 파드 올릴 때는 항상 이곳에 커맨드를 작성해야하는 건지도 잘 모르겠다?

 

 

사실 DevOps 는 한 번도 해보지 않았고.. (그저 존재만 인지했던 지난 날..)

어쩌다가 맨땅에 헤딩하듯 백지장에 CI/CD 배포를 위한 설정을 하고 있어서, 각 설정이나 속성 하나하나의 의미를 다 알진 못하고 있다..

 

이상 뇌피셜로 가득한 글이었다

728x90
반응형

댓글

추천 글