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
  • 相关阅读:
    springboot-配置多数据源(AOP实现)(HikariCP + MybatisPlus + mysql + SqlServer)
    CentOS7安装Oracle 11g数据库
    原型模式
    建造者模式
    单例模式
    抽象工厂模式
    SpringMVC_处理器方法的返回值
    配置文件占位符
    linux不同服务器SSH连接与数据传送
    RestTemplate的三种请求方式
  • 原文地址:https://www.cnblogs.com/dream397/p/14086881.html
Copyright © 2011-2022 走看看