加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用golang连接到具有功能tty的docker容器

发布时间:2020-12-16 09:23:07 所属栏目:大数据 来源:网络整理
导读:以分离(背景)模式启动简单的Docker容器 docker run -d --name test ubuntu tail -f /dev/null 这是我的简单golang代码,我连接到正在运行的容器. 在目前的连接中,我希望获得功能tty. package mainimport ( "fmt" "os/exec" "bufio" "io" "os" "github.com/kr/
以分离(背景)模式启动简单的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命令.

>登录后我没有看到提示,比如root @ ba351b44ca80:/#只有在点击返回后才出现,但是我的光标在新行中没有提示;
>另外向上箭头以获取上一个命令不起作用
只打印出来

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

但是在场景前面的命令被选中并且通过点击返回它被执行.

>执行游标命令后不显示提示,如

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-dockerclient值得一试.它是Docker远程API的一个简单漂亮的抽象.它被许多开源项目使用,并且也定期维护.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读