आपको अपने कंटेनर में CAP_MKNOD क्षमता को स्पष्ट रूप से जोड़ना होगा ।
lxc.cap.keep
Specify the capability to be kept in the container. All other
capabilities will be dropped. When a special value of "none"
is encountered, lxc will clear any keep capabilities specified
up to this point. A value of "none" alone can be used to drop
all capabilities.
आप इसका उपयोग करने का प्रयास भी कर सकते हैं (यदि आप systemd
कंटेनर के अंदर उपयोग करना चाहते हैं )
lxc.hook.autodev
A hook to be run in the container's namespace after mounting
has been done and after any mount hooks have run, but before
the pivot_root, if lxc.autodev == 1. The purpose of this hook
is to assist in populating the /dev directory of the container
when using the autodev option for systemd based containers.
The container's /dev directory is relative to the
${LXC_ROOTFS_MOUNT} environment variable available when the
hook is run.
जो चल रहे स्क्रिप्ट की ओर इशारा कर सकता है mknod
।
इसका उपयोग करना docker
बहुत आसान है। डिफ़ॉल्ट रूप से, कंटेनर अप्रकाशित होते हैं ।
इस उदाहरण में, मैं trusty
रजिस्ट्री से एक कंटेनर खींच रहा हूं :
sudo -r sysadm_r docker pull corbinu/docker-trusty
Pulling repository corbinu/docker-trusty
...
Status: Downloaded newer image for corbinu/docker-trusty:latest
और मैं इसे इंटरएक्टिव मोड में शुरू कर रहा हूं जो मेरे अंदर की क्षमता के बारे में बता रहा है:
sudo -r sysadm_r docker run --cap-drop ALL --cap-add MKNOD \
-i -t corbinu/docker-trusty bash
root@46bbb43095ec:/# ls /dev/
console fd/ full fuse kcore mqueue/ null ptmx pts/ random shm/ stderr stdin stdout tty urandom zero
root@46bbb43095ec:/# mkdir /dev/net
root@46bbb43095ec:/# mknod /dev/net/tun c 10 200
root@46bbb43095ec:/# ls -lrt /dev/net/tun
crw-r--r--. 1 root root 10, 200 Apr 6 16:52 /dev/net/tun
विरोध के रूप में:
sudo -r sysadm_r docker run --cap-drop ALL \
-i -t corbinu/docker-trusty bash
root@9a4cdc75a5ec:/# mkdir /dev/net
root@9a4cdc75a5ec:/# mknod /dev/net/tun c 10 200
mknod: ‘/dev/net/tun’: Operation not permitted
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
कंटेनर कॉन्फ़िगर फ़ाइल में जोड़ना होगा, जैसे यहाँ वर्णित है: superuser.com/a/1205662/130915 फिर, मैंने कंटेनर के अंदर sudo के साथ रूट के रूप में openppn चलाया।