전공영역 공부 기록

컨테이너 디버깅에 유용한 Entrypoint 오버라이딩

악분 2022. 5. 21. 22:49
반응형

개요

종종 컨테이너 디버깅 할 때, 의도한 entrypoint를 실행하지 않으면서 아무것도 실행하지 않는 상황이 필요합니다. 이런 상황에서 좋은 디버깅 방법을 소개합니다.

영상: https://youtu.be/EQ0YBv0w0Js

 

예제

예제는 간단한 파이썬 애플리케이션을 사용합니다.

예제 git링크: https://github.com/choisungwook/debug_container_with_sleep

 

디버깅 방법

entrypoint를 오버라이딩하는 방법으로 아무것도 실행하지 않는 상태(정확히 말하면 무한 sleep)로 컨테이너를 실행할 수 있습니다.

 

컨테이너가 실행되면 entrypoint에 정의된 명령어를 실행합니다. entrypoint를 오버라이딩은 컨테이너에 이미 설정된 entrypoint명령어를 변경할 수 있습니다. 컨테이너는 해당 명령어를 실행합니다. 보통 아무런 행동도 하지 않기 위해 리눅스 명령어인 sleep함수를 사용합니다. 그리고 컨테이너가 종료되지 않도록 while문으로 sleep함수를 무한히 실행하게 합니다. 아래 예제는 2초마다 sleep함수를 실행합니다.

docker run --rm -d \
--entrypoint "/usr/bin/env" \
test:v1 /bin/bash -c 'while true;echo sleep;do sleep 2; done'

 

쿠버네티스에서는 command와 args를 오버라이딩해서 해결할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: debug-demo
  namespace: default
  labels:
    app: debug-demo
spec:
  containers:
  - name: main
    image: "test:v1"
    command:
      - "/usr/bin/env"
    args:
      - "/bin/bash"
      - "-c"
      - "while true;do echo sleep; sleep 2; done"
  restartPolicy: Always
반응형