项目说明
最后更新于
最后更新于
// main
package main
import (
ik "mydocker/inidk"
)
func main(){
ik.NameSpaceInit()
}
// inidk/namespace.go
package inidk
import (
"os/exec"
"syscall"
"os"
"log"
)
func NameSpaceInit(){
cmd := exec.Command("/bin/bash", "-c", "mount --make-rprivate / && mount -t proc proc /proc && exec /bin/sh")
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS|syscall.CLONE_NEWIPC|syscall.CLONE_NEWPID|syscall.CLONE_NEWNS|syscall.CLONE_NEWUSER|syscall.CLONE_NEWNET,
Pdeathsig: syscall.SIGKILL,
}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run();err!=nil{
log.Fatal(err)
}
}
[root@mydocker conf.d]# cat /proc/self/mountinfo |grep proc
19 40 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
44 19 0:37 / /proc/sys/fs/binfmt_misc rw,relatime shared:26 - autofs systemd-1 rw,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14204