0
点赞
收藏
分享

微信扫一扫

Docker与Linux Namespace:UTS Namesapce

南柯Taylor 2021-09-24 阅读 75
PaaS

概述

UTS namespace 主要隔离nodename和domainname两个系统标识。在UTS namespace里面,每个 namespace 允许有自己的hostname。

源码实践

package main

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

func main() {
    cmd := exec.Command("sh")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags: syscall.CLONE_NEWUTS,
    }
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

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

测试结果:

go run uts.go
sh-4.2#pltree -pl
|-sshd(2213)-+-sshd(3437)---bash(3440)
|            |-sshd(8375)
|            `-sshd(9424)---bash(9427)---go(10621)-+-uts(10640)-+-sh(10644)---pstree(10651)
|                                                  |            |-{uts}(10641)
|                                                  |            `-{uts}(10642)
|                                                  |-{go}(10622)
|                                                  |-{go}(10623)
|                                                  |-{go}(10624)
|                                                  |-{go}(10625)
|                                                  |-{go}(10632)
|                                                  `-{go}(10643)

//输出一下当前的 PID
sh-4.2# echo $$   
10644
//父进程和子进程是否在同一个UTS namespace
sh-4.2# readlink /proc/10644/ns/uts
uts:[4026532154]
sh-4.2# readlink /proc/10640/ns/uts
uts:[4026531838]

//修改hostname,是否会影响宿主机的hostname
sh-4.2# hostname -b bird
sh-4.2# hostname
bird
//退出来查看宿主机的hostname
sh-4.2# exit
exit
[root@VM_0_10_centos ux-dev]# hostname
VM_0_10_centos
举报

相关推荐

0 条评论