You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Dec 5, 2022. It is now read-only.
NSEnter is a Python package that enables you to enter Linux kernel namespaces — mount, IPC, net, PID, user and UTS — with a single, simple "setns" syscall. The command line interface is similar to the nsenter C program.
Project Origins
When working with Docker containers, questions usually arise about how to connect into a running container without starting an explicit SSH daemon (which is considered a bad idea). One way is to use Linux Kernel namespaces, which Docker uses to restrict the view from within containers.
The util-linux package provides the nsenter command line utility, but Ubuntu 16.04 LTS unfortunately does not. Jérôme Petazzoni provides a Docker recipe for nsenter on GitHub, or you can compile nsenterfrom source. As there is only one simple syscall to enter a namespace, we can do the call directly from within Python using the ctypes module. We bundled this syscall to create NSEnter.
Additional Links
"Entering Kernel Namespaces from Python," Zalando Tech blog post
importsubprocessfromnsenterimportNamespacewithNamespace(mypid, 'net'):
# output network interfaces as seen from within the mypid's net NS:subprocess.check_output(['ip', 'a'])
# or enter an arbitrary namespace:withNamespace('/var/run/netns/foo', 'net'):
# output network interfaces as seen from within the net NS "foo":subprocess.check_output(['ip', 'a'])
Development Status
This project works as-is. There are currently no plans to extend it, but if you have an idea please submit an Issue to the maintainers.