使用golang连接到具有ttyfunction的docker容器

以分离(背景)模式启动简单的Docker容器

docker run -d --name test ubuntu tail -f /dev/null 

这里是我连接到运行容器的简单golang代码。 在目前的连接,我想获得functiontty。

 package main import ( "fmt" "os/exec" "bufio" "io" "os" "github.com/kr/pty" ) func main() { cmd := exec.Command("docker", "exec", "-it", "test", "bin/bash") tty, err := pty.Start(cmd) if err != nil { fmt.Println("Error start cmd", err) } defer tty.Close() go func() { scanner := bufio.NewScanner(tty) for scanner.Scan() { fmt.Println(scanner.Text()) } }() go func() { io.Copy(tty, os.Stdin) }() err = cmd.Wait() if err != nil { fmt.Println("Error Waiting", err) } } 

更less的工作,但有一对夫妇认为哪个不工作,因为我会从我的terminal运行docker命令。

  1. login后我没有看到提示符,像root@ba351b44ca80:/#只有在命中返回后才出现,但是我的发夹在新行里没有提示;
  2. 也向上箭头以获得以前的命令不起作用只打印出来

     root@ba351b44ca80:/# ^[[A^[[A^[[A 

但在场景之后的前一个命令被选中,并且通过返回它被执行。

  1. 为光标执行命令后不显示提示,如

     root@ba351b44ca80:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr <Here my cursor>