使用golang exec执行docker命令失败

我正在使用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图像”。 它工作,如果我用sudo运行可执行文件。 也就是说,我现在在代码中使用下面的行。

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

在做构build和运行“sudo ./cmd”之后,我得到了docker images命令的输出。 但是,没有sudo,我仍然得到退出状态1.但是,与上面的docker运行命令甚至与sudo,我没有得到一个输出。

感谢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