22#
33# docker_info.sh - 시놀로지 환경에서 sudo docker를 사용하여
44# 컨테이너/이미지 정보를 JSON 형태로 ONLY 출력하는 스크립트
5- #
6- # chkconfig: - 60 30
7- # description: Docker info as JSON
8- #
5+ # HISTORY
6+ # 2025.01.17 : SUHSAECHAN : PW 스크립트 추가
97
108set -euo pipefail
119IFS=$' \n\t '
1210
13- DOCKER_CMD=" sudo docker"
11+ # .env 파일 유효성 확인
12+ if [[ ! -f " .env" ]]; then
13+ echo ' {"error": ".env file not found. Please create an .env file with the required variables."}'
14+ exit 1
15+ fi
16+
17+ # .env 파일 읽기
18+ source .env
19+
20+ # PW 변수 확인
21+ if [[ -z " ${PW:- } " ]]; then
22+ echo ' {"error": "PW is not set in the .env file. Please set PW to use this script."}'
23+ exit 1
24+ fi
25+
26+ DOCKER_CMD=" echo $PW | sudo -S docker"
1427
1528# jq가 설치되어 있는지 확인
1629if ! command -v jq & > /dev/null; then
@@ -30,15 +43,15 @@ error_exit() {
3043# 컨테이너 존재 여부 확인
3144validate_container () {
3245 local container_name=" $1 "
33- if ! ${ DOCKER_CMD} ps -a --format ' {{.Names}}' | grep -wq " ${container_name} " ; then
46+ if ! $DOCKER_CMD ps -a --format ' {{.Names}}' | grep -wq " ${container_name} " ; then
3447 error_exit " Container '${container_name} ' does not exist."
3548 fi
3649}
3750
3851# 이미지 존재 여부 확인
3952validate_image () {
4053 local image_name=" $1 "
41- if ! ${ DOCKER_CMD} images --format ' {{.Repository}}:{{.Tag}}' | grep -wq " ${image_name} " ; then
54+ if ! $DOCKER_CMD images --format ' {{.Repository}}:{{.Tag}}' | grep -wq " ${image_name} " ; then
4255 error_exit " Image '${image_name} ' does not exist."
4356 fi
4457}
@@ -55,7 +68,7 @@ show_container_info() {
5568
5669 validate_container " ${container_name} "
5770
58- ${ DOCKER_CMD} inspect " ${inspect_options[@]} " " ${container_name} " | jq ' .[0]'
71+ $DOCKER_CMD inspect " ${inspect_options[@]} " " ${container_name} " | jq ' .[0]'
5972}
6073
6174# 이미지 정보 (docker inspect <image_name> [OPTIONS])
@@ -70,19 +83,19 @@ show_image_info() {
7083
7184 validate_image " ${image_name} "
7285
73- ${ DOCKER_CMD} inspect " ${inspect_options[@]} " " ${image_name} " | jq ' .[0]'
86+ $DOCKER_CMD inspect " ${inspect_options[@]} " " ${image_name} " | jq ' .[0]'
7487}
7588
7689# 모든 컨테이너 목록 (docker ps [OPTIONS])
7790list_containers () {
7891 local ps_options=(" $@ " )
79- ${ DOCKER_CMD} ps " ${ps_options[@]} " --format ' {{json .}}' | jq -s .
92+ $DOCKER_CMD ps " ${ps_options[@]} " --format ' {{json .}}' | jq -s .
8093}
8194
8295# 모든 이미지 목록 (docker images [OPTIONS])
8396list_images () {
8497 local images_options=(" $@ " )
85- ${ DOCKER_CMD} images " ${images_options[@]} " --format ' {{json .}}' | jq -s .
98+ $DOCKER_CMD images " ${images_options[@]} " --format ' {{json .}}' | jq -s .
8699}
87100
88101# 컨테이너 로그 (docker logs <container_name> [OPTIONS])
@@ -98,7 +111,7 @@ show_container_logs() {
98111 validate_container " ${container_name} "
99112
100113 # 로그 명령어 실행
101- logs=$( ${ DOCKER_CMD} logs " ${log_options[@]} " " ${container_name} " 2>&1 || true)
114+ logs=$( $DOCKER_CMD logs " ${log_options[@]} " " ${container_name} " 2>&1 || true)
102115
103116 # 로그를 JSON 배열로 변환
104117 echo " $logs " | jq -R -s -c ' split("\n") | map(select(length > 0))'
@@ -107,7 +120,7 @@ show_container_logs() {
107120# 시스템 정보 (docker info [OPTIONS])
108121show_system_info () {
109122 local info_options=(" $@ " )
110- ${ DOCKER_CMD} info " ${info_options[@]} " --format ' {{json .}}' | jq ' .'
123+ $DOCKER_CMD info " ${info_options[@]} " --format ' {{json .}}' | jq ' .'
111124}
112125
113126# 메인 로직
@@ -134,12 +147,10 @@ main() {
134147 show_image_info " ${image_name} " " $@ "
135148 ;;
136149 ps)
137- # 'ps'는 추가 옵션 없이도 사용 가능
138150 shift 1
139151 list_containers " $@ "
140152 ;;
141153 images)
142- # 'images'는 추가 옵션 없이도 사용 가능
143154 shift 1
144155 list_images " $@ "
145156 ;;
@@ -152,7 +163,6 @@ main() {
152163 show_container_logs " ${container_name} " " $@ "
153164 ;;
154165 system)
155- # 'system'은 추가 옵션 없이도 사용 가능
156166 shift 1
157167 show_system_info " $@ "
158168 ;;
0 commit comments