gpt4 book ai didi

go - 使用 golang exec 执行 docker 命令失败

转载 作者:IT王子 更新时间:2023-10-29 00:36:22 27 4
gpt4 key购买 nike

我正在使用 cmd.go(见下文)执行 docker 命令,但它失败了。我执行以下步骤来执行并收到以下错误。

go build
sudo ./cmd

输出:

docker run -v ~/exp/a.out:/a.out ubuntu:14.04 /a.out -m 10m
2014/10/16 14:32:12 exit status 1

另一方面直接运行

sudo docker run -v ~/exp/a.out:/a.out ubuntu:14.04 /a.out -m 10m

导致 a.out 的正确输出。

Hello World

这是cmd.go的代码。我怎样才能让它工作?谢谢!

package main

import (
"fmt"
"log"
"os/exec"
"strings"
)

func ExampleCmd_Output() {
//out, err := exec.Command("date", "--version").Output() // This works
//out, err := exec.Command("docker", "--version").Output() // This works
//out, err := exec.Command(cmd, "images").Output() // Even docker images command works!

cmd := "docker"
cmdArgs := []string{"run", "-v", "~/exp/a.out:/a.out", "ubuntu:14.04", "/a.out", "-m", "10m"}
fmt.Println(cmd + " " + strings.Join(cmdArgs, " "))
out, err := exec.Command(cmd, cmdArgs...).Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", out)
}

func main() {
ExampleCmd_Output()
}

编辑:发表评论后,我尝试执行命令“docker images”。如果我用 sudo 运行可执行文件,它就会工作。也就是说,我现在在代码中使用以下行。

out, err := exec.Command(cmd, "images").Output()

执行 go build 并运行“sudo ./cmd”后,我得到了 docker images 命令的输出。但是,如果没有 sudo,我仍然会获得退出状态 1。但是即使使用 sudo,上面的 docker run 命令也不会得到输出。

最佳答案

感谢Os Exec Sudo Command in Go ,我现在可以做我想做的事了。

func main() {
cmdStr := "sudo docker run -v ~/exp/a.out:/a.out ubuntu:14.04 /a.out -m 10m"
out, _ := exec.Command("/bin/sh", "-c", cmdStr).Output()
fmt.Printf("%s", out)
}

输出:

Hello World

关于go - 使用 golang exec 执行 docker 命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411594/

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