티스토리 뷰
서론
본 포스팅에서는 Docker Container의 Exit Code에 대해 알아보도록 하겠습니다.
아래는 Kubernetes를 Kubespray로 기동한 이후의 docker ps 결과입니다.
아래와 같이 Docker Process 중 일부에서 Exited (n) About an hour ago 라는 메시지가 출력되는 것을 확인할 수 있습니다.
개인적으로도 Kubernetes를 처음 설치했을때 위와 같은 Exited Code 들이 혹시 설치가 제대로 되지는 않았던 것인지? 의문이 생기기도 했었으니 아마 저와 비슷한 고민을 하시는 분들이 더러 있을 것이라 생각됩니다.
먼저 결론부터 말하자면, Docker Process에 나타나는 Exit Code 들은 Bash Script의 Exit Code를 따라가며, 0은 성공, 1 ~ 255는 실패를 의미합니다. 따라서 컨테이너 실행 결과는 echo$?로 확인 할 수 있습니다.
현재 dockre ps -a 결과로 Exited 0, 255이 나타나고 있습니다.
본문
docker ps --filter "status=exited"
[root@kubemaster ~]# docker ps -f status=exited |
먼저 발생한 Exited Code들을 먼저 살펴보고 왜 이 코드가 나타났는지 진단해본 뒤 여러 종류의 Exited Code를 더 살펴보는 방식으로 포스팅을 진행하겠습니다.
Kubernetes 기동 시 발생한 Exited Code
1) Exited (0)
Kubernetes를 기동할 때 발생되는 Exited (0)은 Docker Process가 수행해야 할 모든 Command 또는 Shell을 실행하고 정상 종료되었을 때 발생합니다.
8000cee9a6e2 1a6ade52d471 "/install-cni.sh" 53 minutes ago Exited (0) About an hour ago k8s_install-cni_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_2 |
위의 경우 Kubernetes의 CNI 모듈 중 Calico를 설치하기 위한 install-cni.sh이 실행되고 정상 종료되어 발생한 Exited 코드라고 볼 수 있습니다.
또한 Node가 재기동 되거나, Docker stop 명령어로 중지할 경우에도 Docker Process의 상태는 Exited (0)으로 나타납니다.
5c055e25d529 gcr.io/google_containers/pause-amd64:3.1 "/pause" 26 hours ago Exited (0) 23 hours ago k8s_POD_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_0 f9e8789d4f90 gcr.io/google_containers/pause-amd64:3.1 "/pause" 26 hours ago Exited (0) 23 hours ago k8s_POD_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_0 1af384e0e7a0 gcr.io/google_containers/pause-amd64:3.1 "/pause" 26 hours ago Exited (0) 23 hours ago k8s_POD_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_0 |
위와 같은 경우 Kubernetes가 정상 기동되어 있는 상태에서 Virtual Machine을 강제로 재기동 할 경우 기존 Process 들이 Stop 상태로 변경되어 Exited (0)을 나타냅니다.
물론 재기동이 되면 Stop 상태의 Kubernetes Process 이외의 정상 Process 들이 기동되게 됩니다.
2) Exited (255)
Exited Code 255가 발생하는 원인은 Docker Image에 정의된 EntryPoint 또는 CMD가 수행이 완료되었을 경우 발생합니다.
60dd98297574 680bc53e5985 "/coredns -conf /etc 40 hours ago Exited (255) 2 hours ago k8s_coredns_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_1 |
Docker Process는 특이하게 CMD나 EntryPoint로 기동되면 해당 명령어가 Docker Container의 1번 PID로 기동되게 됩니다.
이때 CMD나 EntryPoint가 수행되고 종료되면, OS PID 1번인 Init Process가 죽는 것과 같이 해당 Container가 죽어버리게 됩니다.
이러한 현상을 막기 위해서는 Container Image를 생성할 때 CMD가 종료되지 않도록 후행 처리하는 것이 중요합니다.
또한 Kubernetes Node가 종료되어 Restart 되었을 경우에도 발생할 수 있습니다.
그 밖에도 다양한 Docker Process의 Exited Code 들이 존재합니다.
3) Exited (125) : docker run 명령어의 실패로 실제 docker process가 기동되지 않음
4) Exited (126) : docker Container 내부에서 Command를 실행하지 못할 경우 발생 (권한 문제, 접근 문제, 파일 문제, 옵션 문제 등등으로 발생 가능함)
5) Exited (127) : docker Container 내부에서 Command를 발견하지 못하였을 경우 발생
6) Exited (128 + n) : 리눅스 시그널에 의해 종료되는 경우 발생. n이 바로 Linux Signal Number를 의미
- Exited (130) : 128 + 2로 Linux Signal num 2인 SIGINT가 발생하였을 경우입니다. 바로 Ctrl + c를 입력하여 종료되는 경우를 의미합니다.
- Exited (137) : 128 + 9로 Linux Signal num 9인 SIGKILL이 발생하였을 경우입니다. 자주 사용하는 kill -9로 인해 종료되었을 경우를 의미합니다. docker kill, docker rm -f를 사용했을때 발생 가능합니다.
- Exited (143) : 128 + 15로 Linux Signal num 15인 SIGTERM이 발생하였을 경우입니다.
Exited Docker Container 정리하기
어떠한 이유에서든 Exited Code가 발생한 Container는 더 이상 사용이 불필요한 상태입니다.
Exited Status 상태의 Container들을 한번에 정리하기 위해 아래와 같은 명령어를 실행해 보도록 하겠습니다.
docker rm -v $(docker ps -a -q -f status=exited)
[root@kubemaster ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab637810b56e dfe4432cd2e2 "/cluster-proportion 3 hours ago Up 3 hours k8s_autoscaler_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_2 bde618f9c803 680bc53e5985 "/coredns -conf /etc 3 hours ago Up 3 hours k8s_coredns_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_2 6726974b4a00 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_4 d0df339437c6 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_4 4ae1892a8901 bf4ff15c9db0 "start_runit" 3 hours ago Up 3 hours k8s_calico-node_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_3 0b5e9983ab5a 9b65a0f78b09 "/usr/local/bin/kube 3 hours ago Up 3 hours k8s_kube-proxy_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_2 34c485efc9b5 a1efff7492c8 "/node-cache -locali 3 hours ago Up 3 hours k8s_node-cache_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_2 ad735fd8d9c9 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_2 33f3ae4ffd6b 1a6ade52d471 "/install-cni.sh" 3 hours ago Exited (0) 3 hours ago k8s_install-cni_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_3 adb4a5d42ed3 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_2 216d5533c1f6 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_2 07e5fa51ff73 98fecf43a54f "kube-scheduler --au 3 hours ago Up 3 hours k8s_kube-scheduler_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_2 900bbe227441 df60c7526a3d "kube-apiserver --ad 3 hours ago Up 3 hours k8s_kube-apiserver_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_2 84290fe8e1de bb16442bcd94 "kube-controller-man 3 hours ago Up 3 hours k8s_kube-controller-manager_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_2 31830a0fe497 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_2 f11168aaec9e gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_2 9358dfa022b9 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_2 719768552f4e quay.io/coreos/etcd:v3.3.10 "/usr/local/bin/etcd" 3 hours ago Up 3 hours etcd1 60dd98297574 680bc53e5985 "/coredns -conf /etc 41 hours ago Exited (255) 3 hours ago k8s_coredns_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_1 da0131b80e17 dfe4432cd2e2 "/cluster-proportion 41 hours ago Exited (255) 3 hours ago k8s_autoscaler_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_1 28d10f5f8c27 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_2 57be74bac7d0 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_2 9b2e18480602 bf4ff15c9db0 "start_runit" 41 hours ago Exited (255) 3 hours ago k8s_calico-node_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_2 dcae96557902 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_1 cadda4a2cf56 9b65a0f78b09 "/usr/local/bin/kube 41 hours ago Exited (255) 3 hours ago k8s_kube-proxy_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_1 c38f61a1fcfe a1efff7492c8 "/node-cache -locali 41 hours ago Exited (255) 3 hours ago k8s_node-cache_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_1 e1195ef31d52 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_1 c85fe30b6af3 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_1 2eb2bc1b2fb2 df60c7526a3d "kube-apiserver --ad 41 hours ago Exited (255) 3 hours ago k8s_kube-apiserver_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_1 175fd5562921 bb16442bcd94 "kube-controller-man 41 hours ago Exited (255) 3 hours ago k8s_kube-controller-manager_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_1 f24178e0f688 98fecf43a54f "kube-scheduler --au 41 hours ago Exited (255) 3 hours ago k8s_kube-scheduler_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_1 2ef121c82033 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_1 69f1125b08f5 gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_1 18df38a7ad0e gcr.io/google_containers/pause-amd64:3.1 "/pause" 41 hours ago Exited (255) 3 hours ago k8s_POD_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_1 [root@kubemaster ~]# docker rm -v $(docker ps -a -q -f status=exited) 33f3ae4ffd6b 60dd98297574 da0131b80e17 28d10f5f8c27 57be74bac7d0 9b2e18480602 dcae96557902 cadda4a2cf56 c38f61a1fcfe e1195ef31d52 c85fe30b6af3 2eb2bc1b2fb2 175fd5562921 f24178e0f688 2ef121c82033 69f1125b08f5 18df38a7ad0e [root@kubemaster ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab637810b56e dfe4432cd2e2 "/cluster-proportion 3 hours ago Up 3 hours k8s_autoscaler_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_2 bde618f9c803 680bc53e5985 "/coredns -conf /etc 3 hours ago Up 3 hours k8s_coredns_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_2 6726974b4a00 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_coredns-58687784f9-jshnf_kube-system_a07089a3-cc48-42df-a9f6-0c4f9db41803_4 d0df339437c6 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_dns-autoscaler-79599df498-fvddt_kube-system_69e91902-b6e7-4c7a-ad80-57f4e74274ac_4 4ae1892a8901 bf4ff15c9db0 "start_runit" 3 hours ago Up 3 hours k8s_calico-node_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_3 0b5e9983ab5a 9b65a0f78b09 "/usr/local/bin/kube 3 hours ago Up 3 hours k8s_kube-proxy_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_2 34c485efc9b5 a1efff7492c8 "/node-cache -locali 3 hours ago Up 3 hours k8s_node-cache_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_2 ad735fd8d9c9 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-proxy-dm55b_kube-system_f9e66380-d225-487d-b236-6e1a891c1d6b_2 adb4a5d42ed3 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_nodelocaldns-kjkd9_kube-system_185d6969-d5f1-451c-9390-9b144b39bed4_2 216d5533c1f6 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_calico-node-nzwvv_kube-system_9002216b-3f3b-4f1d-979b-18f788a7b0f9_2 07e5fa51ff73 98fecf43a54f "kube-scheduler --au 3 hours ago Up 3 hours k8s_kube-scheduler_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_2 900bbe227441 df60c7526a3d "kube-apiserver --ad 3 hours ago Up 3 hours k8s_kube-apiserver_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_2 84290fe8e1de bb16442bcd94 "kube-controller-man 3 hours ago Up 3 hours k8s_kube-controller-manager_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_2 31830a0fe497 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-apiserver-kubemaster_kube-system_2c8c858fb1f652ffa713e804eba74b9a_2 f11168aaec9e gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-scheduler-kubemaster_kube-system_3e128801ef687b022f6c8ae175c9c56d_2 9358dfa022b9 gcr.io/google_containers/pause-amd64:3.1 "/pause" 3 hours ago Up 3 hours k8s_POD_kube-controller-manager-kubemaster_kube-system_2e66904ff996fcb87ea953fa44c81051_2 719768552f4e quay.io/coreos/etcd:v3.3.10 "/usr/local/bin/etcd" 3 hours ago Up 3 hours etcd1 [root@kubemaster ~]# |
위와 같이 exited status의 모든 Container가 일괄적으로 정리된 것을 확인할 수 있습니다.
결론
이번 포스팅에서는 docker container의 exit code에 대해 알아보았습니다.
exit라는 단어에서 풍기는 종료, 실패라는 의미뿐 아니라 정상 종료, 완료라는 의미 역시 담고 있다는 것에 유의해야하며, 혹시나 원하는데로 docker container가 기동되지 않거나 동작하지 않을 경우 echo $?로 상태를 진단하는 습관을 갖는 것이 중요합니다.
'③ 클라우드 > ⓓ Docker' 카테고리의 다른 글
도커 이미지 관리를 위한 Garbage Collection (Docker GC) (0) | 2020.03.12 |
---|---|
docker save, load & docker export, import 비교하기 (0) | 2020.02.05 |
[Docker] Kubernetes 보안 (Cgroup) (1) | 2019.10.11 |
[Docker Command] docker 명령어 뽀개기 (1) | 2019.09.04 |
[Docker Insecure Registry] "server gave HTTP response to HTTPS client" (0) | 2019.08.27 |
- Total
- Today
- Yesterday
- JBoss
- TA
- Architecture
- kubernetes
- aws
- 오픈스택
- JEUS6
- apache
- MSA
- aa
- SA
- openstack token issue
- node.js
- nodejs
- OpenStack
- 쿠버네티스
- 아키텍처
- SWA
- 마이크로서비스
- Docker
- wildfly
- git
- 마이크로서비스 아키텍처
- k8s
- webtob
- openstack tenant
- JEUS7
- API Gateway
- jeus
- Da
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |