18

How do I get a list of all the containers in a user-defined docker network?

I would like to get all the commit hashes of every container for a specific user-defined docker network.

Nam G VU
  • 30,868
  • 67
  • 216
  • 353
Viktor Vojnovski
  • 1,111
  • 1
  • 7
  • 19

7 Answers7

20
docker network inspect \
  -f '{{ range $key, $value := .Containers }}{{ printf "%s\n" $key}}{{ end }}' \
  <network-id>

will give a newline delimited list of the container hashes belonging to the network-id network.

You can adjust the printf format to get other syntax (comma-separated, tab-separated, container id+name, etc). For example:

 $ docker network inspect \
    -f '{{ range $key, $value := .Containers }}{{printf "%s: %s\n" $key .Name}}{{ end }}' \
    web-ingress
0b7f82ad7535ac7c1a454aaf0a5df6b87547d3cb9d751d0e0e1b4952a849b11b: mon_grafana.1.v5i0ea6nv12k0h3eo8egglg6n
1cce723642af2ce9382c7d46cca868d4674b4645d07458eeed9e928d29a4fb1f: mon_prometheus.1.lsfdcig6uhqfbbv7n07irpj3j
1f4840710f77fa1e02bd3e95581139b9f3c13fe4c857ce6ac44bfbdae4916920: mon_alertmanager.1.kwvw7kqsfpi9qzpmqdrd85yc7
2efea443fee41fd5dbca714145ca6ff95d91be9c60a469be597aadfaca90914d: mon_unsee.1.3lg8qgnvshibklnypzt5rw95s
6fdb893488f6e56766501e763d4c60196ae12a22ee9bd204d84fe324331714e8: mon_dashboard.1.r6b6nhatwmk88y5ncgagnaxh4
lb-web-ingress: web-ingress-endpoint
Hamy
  • 19,512
  • 14
  • 71
  • 96
Viktor Vojnovski
  • 1,111
  • 1
  • 7
  • 19
15

You can list all networks with:

docker network ls

And inspect one network to see its hosts (containers)

docker network inspect <network-id>

Inspecting that a container, you can see which network it is connected to:

docker inspect <container-id>

More info in the docs: https://docs.docker.com/engine/userguide/networking/work-with-networks/#create-networks

Robert
  • 29,597
  • 6
  • 79
  • 88
  • I found that when a container has been brought up with an attribute of network_mode: "service: " that the 'docker inspect' or 'docker network inspect ' commands are not going to give you the information as detailed above. What you will see is something like this: "NetworkMode": "container: " – Mad Max Jan 27 '22 at 00:38
1

Another way using pure bash and no python - easier to remember for me

docker network inspect YOUR_NETWORK_ID | grep Name | tail -n +2 | cut -d':' -f2 | tr -d ',"'

Sample output

container1
container2
Nam G VU
  • 30,868
  • 67
  • 216
  • 353
1

Solution can be simple as below as well. To list name of the container only

docker network inspect NETWORK ID | grep "Name" | awk -F":" '{print $2}' | tr -d ',"'

enter image description here

7ochem
  • 2,135
  • 1
  • 32
  • 39
kartik
  • 151
  • 2
  • 5
0

This is my bash command using python's json parsing

docker network inspect YOUR_NETWORK_ID \
    | python -c "import sys, json; print([v['Name'] for k,v in json.load(sys.stdin)[0]['Containers'].items()])"

Sample output

[u'container1', u'container2']
Nam G VU
  • 30,868
  • 67
  • 216
  • 353
0

A simple command to list the names of the container using a custom network is:

docker inspect network-name | grep Name

This command will list the name of the network and containers connected to it like below:

"Name": "network-name",
        "Name": "Container1",
        "Name": "Container2",
Surya
  • 689
  • 12
  • 24
0

I found that when a container has been brought up with an attribute of

network_mode: "service: <some service name>"

that the 'docker inspect' or 'docker network inspect ' commands are not going to give you the information as detailed above.

What you will see instead is something like this:

"NetworkMode": "container: <some container id representing the service>"

Mad Max
  • 443
  • 4
  • 6