docker inspect

docker inspect

Docker가 관리하는 객체에 대한 저수준(low-level) 정보를 반환하는 명령이에요. 기본적으로 결과를 JSON 배열로 렌더링해요.

출처: 문서

본문

docker inspect는 Docker가 제어하는 구성 요소에 대한 상세 정보를 제공해요.

기본적으로 docker inspect는 결과를 JSON 배열로 렌더링해요.

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
-f, --format 커스텀 템플릿으로 출력 형식 지정: 'json': JSON 형식으로 출력, 'TEMPLATE': 주어진 Go 템플릿으로 출력. 자세한 내용은 https://docs.docker.com/go/formatting/ 참고
-s, --size 타입이 컨테이너면 전체 파일 크기 표시
--type 주어진 타입의 객체만 조사

출력 형식 지정 (--format)

형식을 지정하면 각 결과에 대해 주어진 템플릿이 실행돼요.

Go의 text/template 패키지가 형식의 모든 세부 사항을 설명해요.

대상 타입 지정 (--type)

--type config|container|image|node|network|secret|service|volume|task|plugin

docker inspect 명령은 ID 또는 이름으로 어떤 타입의 객체와도 매칭해요. 어떤 경우에는 같은 이름을 가진 여러 타입의 객체(예: 컨테이너와 볼륨)가 존재해서 결과가 모호해질 수 있어요.

docker inspect를 특정 타입의 객체로 제한하려면 --type 옵션을 사용해요.

다음 예제는 myvolume이라는 볼륨을 조사해요.

$ docker inspect --type=volume myvolume

컨테이너 크기 조사 (-s, --size)

--size(또는 짧은 형식 -s) 옵션은 docker inspect 출력에 두 개의 추가 필드를 더해요. 이 옵션은 컨테이너에서만 동작해요. 컨테이너가 실행 중일 필요는 없고, 중지된 컨테이너에서도 동작해요.

$ docker inspect --size mycontainer

출력에는 일반 docker inspect 명령의 전체 출력이 포함되고, 다음 추가 필드가 더해져요.

  • SizeRootFs: 컨테이너 안 모든 파일의 총 크기 (바이트 단위).
  • SizeRw: 컨테이너의 이미지와 비교해 컨테이너에서 생성되거나 변경된 파일의 크기 (바이트 단위).
$ docker run --name database -d redis
3b2cbf074c99db4a0cad35966a9e24d7bc277f5565c17233386589029b7db273
$ docker inspect --size database -f '{{ .SizeRootFs }}'
123125760
$ docker inspect --size database -f '{{ .SizeRw }}'
8192
$ docker exec database fallocate -l 1000 /newfile
$ docker inspect --size database -f '{{ .SizeRw }}'
12288

인스턴스의 IP 주소 가져오기

대부분의 경우 JSON에서 아무 필드나 비교적 직관적인 방식으로 골라낼 수 있어요.

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID

인스턴스의 MAC 주소 가져오기

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID

인스턴스의 로그 경로 가져오기

$ docker inspect --format='{{.LogPath}}' $INSTANCE_ID

인스턴스의 이미지 이름 가져오기

$ docker inspect --format='{{.Config.Image}}' $INSTANCE_ID

모든 포트 바인딩 나열

결과의 배열과 맵을 반복해 간단한 텍스트 출력을 만들 수 있어요.

$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{with $conf}}{{(index . 0).HostPort}}{{else}}none{{end}} {{end}}' $INSTANCE_ID

특정 포트 매핑 찾기

.Field 구문은 필드 이름이 숫자로 시작하면 동작하지 않지만, 템플릿 언어의 index 함수는 동작해요. .NetworkSettings.Ports 섹션에는 내부 포트 매핑에서 외부 주소/포트 객체 목록으로의 맵이 들어 있어요. 숫자 공개 포트만 가져오려면 index로 특정 포트 맵을 찾고, index 0으로 그 안의 첫 번째 객체를 가져와요. 그다음 HostPort 필드를 지정해 공개 주소를 가져와요.

$ docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID

JSON 형식으로 하위 섹션 가져오기

다른 필드를 포함하는 구조체 자체인 필드를 요청하면 기본적으로 내부 값의 Go 스타일 덤프가 제공돼요. Docker는 결과를 JSON 형식으로 얻는 데 적용할 수 있는 json 템플릿 함수를 추가해요.

$ docker inspect --format='{{json .Config}}' $INSTANCE_ID

더 알아보기