gpt4 book ai didi

bash - 以编程方式执行到 docker 容器中

转载 作者:行者123 更新时间:2023-12-01 22:23:01 26 4
gpt4 key购买 nike

我想编写一个程序,允许用户选择一个正在运行的 docker 容器,他们可以得到一个交互式 shell。我想要的程序流程大致如下:

  • 用户从 bash 运行程序 - ./my_program
  • 给用户一个
    他们可以使用交互式 cli 来选择要使用的 docker 容器exec进入
  • 当用户选择容器时,例如 docker exec -it <CONTAINER_ID> bashmy_program 运行, my_program退出,用户被转移到 docker 容器的 shell session 中,就好像他们手动运行了 docker exec -it <CONTAINER_ID> bash

  • 我正在使用以下代码从 golang 尝试此操作:
    rv, err := exec.Command("docker", "exec", "-it", containerId, "bash").Output()
    log.Infof("RV: %v", rv)
    if err != nil {
    log.Errorf("Error exec-ing into container: %s", err)
    }


    并查看以下输出:
    RV: []
    Error exec-ing into container: exit status 1

    我正在尝试 err := exec.Command("docker", "exec", "-it", containerId, "bash").Run()也看到同样的错误。

    我该如何创建这样的程序或调试当前正在发生的事情?

    最佳答案

    由于您以交互模式(-i)和 tty(-t)启动 docker exec,因此 exec.Command需要为用户提供一种从 tty 发送输入/接收输出的方法。

    将 cmd 的标准输入/标准输出直接绑定(bind)到您的 go过程:

    cmd := exec.Command("docker", "exec", "-it", containerId, "bash")

    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout

    err := cmd.Run()
    if err != nil {
    panic(err)
    }

    // reached once user types `exit` from the bash shell
    fmt.Println("Docker: bash console ended successfully")

    关于bash - 以编程方式执行到 docker 容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61860421/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com