Skip to content

Commit

Permalink
exec command compeleted
Browse files Browse the repository at this point in the history
  • Loading branch information
xwjahahahaha committed Nov 15, 2021
1 parent c1f0487 commit 68376d0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
8 changes: 5 additions & 3 deletions cmd/commands.go
Expand Up @@ -93,18 +93,20 @@ var execCommand = &cobra.Command{
Use: "exec [container_id] [command]",
Short: "exec a command into container",
Long: "print logs of a container",
//Args: cobra.ExactArgs(2),
Run: func(cmd *cobra.Command, args []string) {
namespace.EnterNamespace()
if os.Getenv(ENV_EXEC_PID) != "" {
// 第二次调用的时候执行
log.Log.Infof("pid callback pid %s", os.Getenv(ENV_EXEC_PID))
// 调用namespace包自动调用C代码setns进入容器空间
namespace.EnterNamespace()
return
}
if len(args) < 2 {
log.Log.Errorf("Missing container id and command")
log.Log.Errorf("Missing container name or command.")
return
}
cid, commandAry := args[0], strings.Split(args[1], " ")
// 设置环境变量
container.ExecContainer(cid, commandAry)
},
}
11 changes: 8 additions & 3 deletions container/exec.go
Expand Up @@ -15,6 +15,10 @@ const (
ENV_EXEC_CMD = "mydocker_cmd"
)

// ExecContainer
// @Description: 创建子命令运行exec
// @param containerID
// @param commandAry
func ExecContainer(containerID string, commandAry []string) {
pid, err := getContainerPidByID(containerID)
if err != nil {
Expand All @@ -23,7 +27,7 @@ func ExecContainer(containerID string, commandAry []string) {
cmdStr := strings.Join(commandAry, " ")
log.Log.Infof("container pid %s", pid)
log.Log.Infof("command %s", cmdStr)
// 执行我们自己创建的命令exec

cmd := exec.Command("/proc/self/exe", "exec")
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
Expand All @@ -38,9 +42,10 @@ func ExecContainer(containerID string, commandAry []string) {
log.LogErrorFrom("ExecContainer", "Setenv_ENV_EXEC_CMD", err)
return
}
// 执行

if err := cmd.Run(); err != nil {
log.Log.Errorf("Exec container %s error %v", containerID, err)
log.LogErrorFrom("ExecContainer", "Run", err)
return
}
}

Expand Down
5 changes: 3 additions & 2 deletions namespace/setns.go
Expand Up @@ -11,7 +11,7 @@ package namespace
#include <errno.h>
#include <string.h>
// _attribute_((constructor))指的是一旦这个包被调用那么这个函数就会自动被执行。类似于构造函数,会在程序一启动的时候运行
// __attribute__((constructor))指的是一旦这个包被调用那么这个函数就会自动被执行。类似于构造函数,会在程序一启动的时候运行
__attribute__((constructor)) void enter_namespace(void) {
char *mydocker_pid;
// 从环境变量中获取需要进入的PID
Expand Down Expand Up @@ -53,4 +53,5 @@ __attribute__((constructor)) void enter_namespace(void) {
*/
import "C"

func EnterNamespace() {}
func EnterNamespace() {
}

0 comments on commit 68376d0

Please sign in to comment.