To get all the information for a container you can run:
docker inspect <container>
You can get an specific information from a container by running:
docker inspect -f '<format>' <container>
For instance, you can get the Network Settings by running:
docker inspect -f '{{ .NetworkSettings }}' <container>
You can also get just the IP address:
docker inspect -f '{{ .NetworkSettings.IPAddress }}' <container>
The parameter -f means format and will receive a Go Template as input to format what is expected, but this won’t bring a beautiful return, so try:
docker inspect -f '{{ json .NetworkSettings }}' {{containerIdOrName}}
the json keyword will bring the return as a JSON.
So to finish, a little tip is to use python in there to format the output JSON:
docker inspect -f '{{ json .NetworkSettings }}' <container> | python -mjson.tool
And voila, you can query anything on the docker inspect and make it look pretty in your terminal.
It's also possible to use a utility called "jq" in order to help process docker inspect
command output.
docker inspect -f '{{ json .NetworkSettings }}' aa1 | jq [.Gateway]
The above command will return the following output:
[
"172.17.0.1"
]
This output is actually a list containing one element. Sometimes, docker inspect
displays a list of several elements, and you may want to refer to a specific element. For example, if Config.Env
contains several elements, you can refer to the first element of this list using index
:
docker inspect --format '{{ index (index .Config.Env) 0 }}' <container>
The first element is indexed at zero, which means that the second element of this list is at index 1
:
docker inspect --format '{{ index (index .Config.Env) 1 }}' <container>
Using len
it is possible to get the number of elements of the list:
docker inspect --format ‘{{ len .Config.Env }}’ <container>
And using negative numbers, it's possible to refer to the last element of the list:
docker inspect –format “{{ index .Config.Cmd $[$(docker inspect –format ‘{{ len .Config.Cmd }}’ <container>)-1]}}” <container>
Some docker inspect
information comes as a dictionary of key:value, here is an extract of a
docker inspect
of a jess/spotify running container
"Config": { "Hostname": "8255f4804dde", "Domainname": "", "User": "spotify", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "DISPLAY=unix:0", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "HOME=/home/spotify" ], "Cmd": [ "-stylesheet=/home/spotify/spotify-override.css" ], "Image": "jess/spotify", "Volumes": null, "WorkingDir": "/home/spotify", "Entrypoint": [ "spotify" ], "OnBuild": null, "Labels": {} },
so I an get the values of the whole Config section
docker inspect -f '{{.Config}}' 825
{8255f4804dde spotify false false false map[] false false false [DISPLAY=unix:0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOME=/home/spotify] [-stylesheet=/home/spotify/spotify-override.css] false jess/spotify map[] /home/spotify [spotify] false [] map[] }
but also a single field, like the value of Config.Image
docker inspect -f '{{index (.Config) "Image" }}' 825
jess/spotify
or Config.Cmd
docker inspect -f '{{.Config.Cmd}}' 825
[-stylesheet=/home/spotify/spotify-override.css]
In order to inspect an image, you can use the image ID or the image name, consisting of repository and tag. Say, you have the CentOS 6 base image:
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6 cf2c3ece5e41 2 weeks ago 194.6 MB
In this case you can run either of the following:
➜ ~ docker inspect cf2c3ece5e41
➜ ~ docker inspect centos:centos6
Both of these command will give you all information available in a JSON array:
[
{
"Id": "sha256:cf2c3ece5e418fd063bfad5e7e8d083182195152f90aac3a5ca4dbfbf6a1fc2a",
"RepoTags": [
"centos:centos6"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "2016-07-01T22:34:39.970264448Z",
"Container": "b355fe9a01a8f95072e4406763138c5ad9ca0a50dbb0ce07387ba905817d6702",
"ContainerConfig": {
"Hostname": "68a1f3cfce80",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) CMD [\"/bin/bash\"]"
],
"Image": "sha256:cdbcc7980b002dc19b4d5b6ac450993c478927f673339b4e6893647fe2158fa7",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"build-date": "20160701",
"license": "GPLv2",
"name": "CentOS Base Image",
"vendor": "CentOS"
}
},
"DockerVersion": "1.10.3",
"Author": "https://github.com/CentOS/sig-cloud-instance-images",
"Config": {
"Hostname": "68a1f3cfce80",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "sha256:cdbcc7980b002dc19b4d5b6ac450993c478927f673339b4e6893647fe2158fa7",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"build-date": "20160701",
"license": "GPLv2",
"name": "CentOS Base Image",
"vendor": "CentOS"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 194606575,
"VirtualSize": 194606575,
"GraphDriver": {
"Name": "aufs",
"Data": null
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2714f4a6cdee9d4c987fef019608a4f61f1cda7ccf423aeb8d7d89f745c58b18"
]
}
}
]
docker inspect
supports Go Templates via the --format
option. This allows for better integration in scripts, without resorting to pipes/sed/grep traditional tools.
Print a container internal IP:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 7786807d8084
This is useful for direct network access of load-balancers auto-configuration.
Print a container init PID:
docker inspect --format '{{ .State.Pid }}' 7786807d8084
This is useful for deeper inspection via /proc
or tools like strace
.
Advanced formating:
docker inspect --format 'Container {{ .Name }} listens on {{ .NetworkSettings.IPAddress }}:{{ range $index, $elem := .Config.ExposedPorts }}{{ $index }}{{ end }}' 5765847de886 7786807d8084
Will output:
Container /redis listens on 172.17.0.3:6379/tcp
Container /api listens on 172.17.0.2:4000/tcp
docker inspect
command can be used to debug the container logs.
The stdout and stderr of container can be checked to debug the container, whose location can be obtained using docker inspect
.
Command :
docker inspect <container-id> | grep Source
It gives the location of containers stdout and stderr.
docker logs --follow <containerid>
This tails the output of the running container. This is useful if you did not set up a logging driver on the docker daemon.