I want to list all the network namespaces on my Linux machine. So far I found two recommended ways to do this:
ip netns list
And
lsns --type=net
Unfortunately both commands do not list all the namespaces! The first only lists the namespaces found in /var/run/netns and the second will only find namespaces with at least one process running in it. Docker for example will save its namespaces in /var/run/docker/netns (so they are not shown by ip netns) and there are some namespaces without a running process (so they are not shown by lsns). Is there any command that prints ALL the network namespaces on the host?
To include the network namespaces of running docker containers into
ip netns list
you could just set a symbolic link (aka softlink) like this:Unfortunately there is no generic command in linux to list all network namespaces. You could use the following python script to list at least all namespaces that are linked in
/var/run/netns
: https://github.com/Intika-Linux-Namespace/Namespace-ListerFor applications using other paths you would have to modify this script.
Not by name, but you can find all used namespaces by looking into /proc/{PID}/ns/net
This script (run as root) shows a list of used network namespace IDs on the machine: