通过Go Exec库运行docker -H ssh://user@hostname时出错

r3i60tvu  于 2023-02-27  发布在  Go
关注(0)|答案(1)|浏览(112)

我正在尝试使用to远程部署一个raspberrypi容器。下面的代码是原始代码的简化片段。

command := "docker -H ssh://pi@raspberrypi.local 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键来建立这个连接,如果我手动运行命令行,它工作得很好,但运行Go我得到了这个错误:

docker -H ssh://pi@raspberrypi.local 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
tgabmvqs

tgabmvqs1#

经过几次测试,我自己才找到了答案。
错误消息对此不是很清楚,但是我们需要将操作系统环境变量传递给使用cmd.Env = os.Environ()创建的exec.cmd
下面是完整的代码示例:

command := "docker -H ssh://pi@raspberrypi.local 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)
    }

相关问题