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