最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

docker linux namespace系统资源隔离

golang 27浏览 0评论

docker

linux namespace是Kernel的功能,它会隔离系统的资源,如PID,UTS,IPC,UserID,Network,docker也用到了这部分的内容,下面是go代码只要实现了这功能

package main

import (
        "log"
        "os"
        "os/exec"
        "syscall"
)

func main() {
        cmd := exec.Command("sh")
        cmd.SysProcAttr = &syscall.SysProcAttr{
                Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS | syscall.CLONE_NEWUSER |syscall.CLONE_NEWNET,
        }
        cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(1), Gid: uint32(1)}
        cmd.Stdin = os.Stdin
        cmd.Stdout = os.Stdout
        cmd.Stderr = os.Stderr

        if err := cmd.Run(); err != nil {
                log.Fatal(err)
        }
        os.Exit(-1)
}

PS.运行的时候会出现2017/09/05 16:51:38 fork/exec /usr/bin/sh: invalid argument exit status 1主要是隔离用户的时候出现的错误,目前未找到原因

上面的代码出之《自己动手写Docker》,我看了别人的评论好像也有这个问题
https://github.com/xianlubird/mydocker/issues/3
Linux kernel在3.19以上的版本中对user namespace做了些修改,我怀疑跟这个有关,链接是:https://go-review.googlesource.com/c/10670/
作者开发验证的操作系统版本和内核版本是ubuntu 14.04和kernel-3.13
我的内核是3.10.0貌似也有问题

QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» docker linux namespace系统资源隔离
本文链接地址:https://www.phpsong.com/3359.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!