반응형
docker inspect 명령은 도커 컨테이너의 모든 설정을 JSON 형식으로 반환해 줍니다.
하지만 이 출력이 너무 방대하기 때문에, 어떤 필드를 어디에 써야 하는지 모르면 단순한 정보 덤일 뿐입니다.이번 글에서는 docker inspect 결과에서 중요한 항목들을 의미 기반으로 매핑해서,
실무에서 컨테이너 디버깅, 설정 변경, 보안 점검 등에 어떻게 활용할 수 있는지 정리합니다.
1. 예시 명령어
docker inspect opensearch

2. 핵심 항목 매핑표: 이 값은 어디에 쓰이는가?
| JSON | 키 설명 | 활용 예시 |
| Id | 컨테이너 고유 ID (SHA256) | docker logs, docker cp, 디버깅 대상 명시 |
| Path | 실행 명령 | 컨테이너 시작 시 호출되는 진입점 (entrypoint) |
| Args | 실행 시 인자 | Path 뒤에 붙는 명령어 인자 |
| State.Status | 실행 상태 | running, exited 여부 확인 |
| State.Pid | 컨테이너의 PID (호스트 기준) | nsenter, top, strace 등으로 접근 가능 |
| RestartCount | 재시작 횟수 | 불안정한 컨테이너 감지 |
| Mounts[].Source | 호스트 디렉터리 | 호스트 ↔ 컨테이너 공유 디렉터리 확인 |
| Mounts[].Destination | 컨테이너 내 경로 | 실제 마운트된 위치 |
| HostConfig.NetworkMode | 네트워크 모드 | host, bridge, none 등 |
| HostConfig.Binds | 볼륨 바인딩 | 데이터 지속성 또는 공유 확인 |
| HostConfig.Privileged | 권한 상승 여부 | 보안 설정 점검 포인트 |
| Config.Entrypoint | 엔트리포인트 스크립트 | 실행 파일 위치 추정 (WorkingDir와 함께) |
| Config.Cmd | Entrypoint 이후 실행 명령 | 엔트리포인트가 실행한 실제 커맨드 |
| Config.Env[] | 환경 변수 목록 | 애플리케이션 설정 파악 |
| Config.Image | 사용 이미지 | 배포 이미지 버전 추적 |
| Config.ExposedPorts | 외부 노출 포트 | 방화벽/보안그룹과 연계 검토 |
| NetworkSettings.Networks | 컨테이너가 연결된 네트워크 | overlay, host, custom network 확인 |
| LogPath | 로그 파일 경로 | JSON 로그 파일 위치 → 문제 분석 가능 |
3. 실제 사례 분석: Entrypoint 스크립트 추적하기
% docker inspect opensearch
...
"WorkingDir": "/usr/share/opensearch",
"Entrypoint": ["./opensearch-docker-entrypoint.sh"]
...
3-1. 매핑 해석
| 항목 | 값 | 의미 |
| WorkingDir | /usr/share/opensearch | 모든 상대 경로는 여기 기준 |
| Entrypoint | ./opensearch-docker-entrypoint.sh | 실행 스크립트는 이 디렉토리 아래 존재 |
→ 실제 경로: /usr/share/opensearch/opensearch-docker-entrypoint.sh
3-2. 파일 확인 방법
# 파일 검색
docker exec -it opensearch bash
ls -l /usr/share/opensearch/opensearch-docker-entrypoint.sh
# 전체 검색
docker exec -it opensearch find / -name "*entrypoint*.sh" 2>/dev/null
4. 매핑을 활용한 실전 시나리오들
4-1. 데이터 디렉터리가 어딘지 확인하고 싶다
"Mounts": [
{
"Source": "/data/QSv3_with_Lobster/opensearch-data",
"Destination": "/usr/share/opensearch/data"
}
]
→ 호스트 경로 /data/QSv3_with_Lobster/opensearch-data가
→ 컨테이너 안에서는 /usr/share/opensearch/data로 마운트됨
✅ 로그 손실/데이터 복구/디스크 용량 체크 등 실무에 활용
4-2. 어떤 포트를 외부에 노출하는지 확인
"ExposedPorts": {
"9200/tcp": {},
"9300/tcp": {}
}
→ 컨테이너가 외부에 열어둔 포트
→ 보안 정책, 보안 그룹 설정과 비교하여 확인
4-3. 이 컨테이너는 루트 권한인가?
"Config.User": "1000",
"HostConfig.Privileged": false
→ UID 1000 사용 중 (비루트 유저)
→ privileged 모드 아님 → 보안상 안전한 설정
5. 요약: docker inspect는 값보다 문맥이 중요
| 확인하고 싶은 것 | 어디를 보면 되는가? |
| 실행 중인 파일 경로 | Path, Entrypoint, WorkingDir |
| 어떤 디렉터리가 마운트됐는가 | Mounts[].Source, Mounts[].Destination |
| 어디서 문제가 났는가 | LogPath, State.ExitCode, State.Error |
| 컨테이너 재시작 여부 | RestartCount, RestartPolicy |
| 환경 변수 확인 | Config.Env[] |
728x90
반응형
'Develop' 카테고리의 다른 글
| [fetchBaseQuery] RTK Query PATCH 요청 시 body wrapper를 피하는 올바른 방식 (0) | 2025.11.10 |
|---|---|
| [Github] 계정 및 레포지토리별 SSH Key 분리 전략 및 설정 (3) | 2025.07.11 |
| [Python] 텔레그램 채널 알림 시스템(봇) 만들기 (with BotFather) (0) | 2025.06.17 |
| [nodejs] CORS Preflight 완전 정복 - 브라우저가 먼저 “실례합니다!” (1) | 2025.06.04 |
| [React] dyld: Library not loaded: /usr/local/homebrew/opt/icu4c/lib/libicui18n.74.dylib (0) | 2024.12.10 |
| [Python] except 상세 logging 방법 (1) | 2024.11.27 |
| [Python] SyntaxError: f-string: unmatched '[' 원인 및 해결 방법 (0) | 2024.11.26 |
| [Docker] docker-compose 실행 및 중지, 테스트 방법 (0) | 2024.11.25 |