【问题标题】:Using golang connect to docker container with functional tty使用 golang 连接到具有功能性 tty 的 docker 容器
【发布时间】:2017-01-13 04:12:37
【问题描述】:

以分离(后台)模式启动简单的 Docker 容器

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

这是我连接到正在运行的容器的简单 golang 代码。 在当前连接中,我想获得功能性 tty。

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)
  }
}

它工作得越少,但有几个人认为这不起作用,因为我会从我的终端运行 docker 命令。

  1. 登录后看不到提示,比如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>
    

【问题讨论】:

标签: go docker tty pty


【解决方案1】:

go-dockerclient 值得一试。它是 Docker 远程 API 的简单抽象。它被许多开源项目使用,并定期维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2020-05-31
    • 1970-01-01
    • 2016-11-17
    • 2018-03-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多