Linux Networking – How to List All Network Namespaces

linuxnamespacesnetworking

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?

Best Answer

To include the network namespaces of running docker containers into ip netns list you could just set a symbolic link (aka softlink) like this:

ln -Ts /var/run/docker/netns /var/run/netns

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-Lister

For applications using other paths you would have to modify this script.

Related Topic