zoukankan      html  css  js  c++  java
  • cgo setns + libcontainer nsexec

    https://www.jianshu.com/p/c48e6cd84ff5

    nsenter/nsenter.go

    1、怎么获取mydocker_pid 

    2、怎么获取mydocker_cmd

    package nsenter
    
    /*
    #include <errno.h>
    #include <sched.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    
    __attribute__((constructor)) void enter_namespace(void) {
        char *mydocker_pid;
        mydocker_pid = getenv("mydocker_pid");
        if (mydocker_pid) {
            fprintf(stdout, "got mydocker_pid=%s
    ", mydocker_pid);
        } else {
            fprintf(stdout, "missing mydocker_pid env skip nsenter");
            return;
        }
        char *mydocker_cmd;
        mydocker_cmd = getenv("mydocker_cmd");
        if (mydocker_cmd) {
            fprintf(stdout, "got mydocker_cmd=%s
    ", mydocker_cmd);
        } else {
            fprintf(stdout, "missing mydocker_cmd env skip nsenter");
            return;
        }
        int i;
        char nspath[1024];
        char *namespaces[] = { "ipc", "uts", "net", "pid", "mnt" };
    
        for (i=0; i<5; i++) {
            sprintf(nspath, "/proc/%s/ns/%s", mydocker_pid, namespaces[i]);
            int fd = open(nspath, O_RDONLY);
    
            if (setns(fd, 0) == -1) {
                fprintf(stderr, "setns on %s namespace failed: %s
    ", namespaces[i], strerror(errno));
            } else {
                fprintf(stdout, "setns on %s namespace succeeded
    ", namespaces[i]);
            }
            close(fd);
        }
        int res = system(mydocker_cmd);
        exit(0);
        return;
    }
    */
    import "C
  • 相关阅读:
    php实现rpc简单的方法
    统计代码量
    laravel的速查表
    header的参数不能带下划线
    PHP简单实现单点登录功能示例
    phpStorm函数注释的设置
    数据结构基础
    laravel生命周期和核心思想
    深入理解php底层:php生命周期
    Jmeter:实例(性能测试目标)
  • 原文地址:https://www.cnblogs.com/dream397/p/14086881.html
Copyright © 2011-2022 走看看