登录
首页 >  Golang >  Go问答

执行Go Exec库通过SSH连接到主机用户运行Docker时出现错误

来源:stackoverflow

时间:2024-03-24 23:15:32 178浏览 收藏

在使用 Go Exec 库通过 SSH 连接到远程主机时,运行 Docker 命令时遇到错误。错误消息显示为“error during connect: Get 'http://docker.example.com/v1.24/containers/json?...'”,指示 SSH 无法解析为当前目录中的可执行文件。

问题内容

我正在尝试使用 go 在树莓派上远程部署容器。以下代码是原始代码的简化片段。

    command := "docker -h ssh://[email protected] compose -f /tmp/code/docker-compose.yml up -d"

    parsedcommand := parsecommand(command)

    fmt.println(command)

    cmd := exec.command(parsedcommand[0], parsedcommand[1:]...)

    cmd.stdout = os.stdout
    cmd.stderr = os.stderr

    err := cmd.run()
    if err != nil {
        fmt.println(err)
    }

我已经有一个用于建立此连接的 ssh 密钥,如果我手动运行 commando,它运行良好,但通过 go 运行我收到此错误:

docker -H ssh://[email protected] compose -f /tmp/code/docker-compose.yml up -d
error during connect: Get "http://docker.example.com/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Djanus%22%3Atrue%7D%7D": ssh resolves to executable in current directory (./ssh)
exit status 1

正确答案


经过几次测试,我自己找到了答案。

错误消息不是很清楚,但我们需要将操作系统环境变量传递给使用 cmd.env = os.environ() 创建的 exec.cmd

这里是完整的代码示例:

    command := "docker -H ssh://[email protected] compose -f /tmp/code/docker-compose.yml up -d"

    parsedCommand := parseCommand(command)

    fmt.Println(command)

    cmd := exec.Command(parsedCommand[0], parsedCommand[1:]...)

    cmd.Env = os.Environ()

    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

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

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>