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