2014-10-16 167 views
4

我正在使用cmd.go(見下文)執行docker命令,但失敗。我執行以下步驟來執行並獲得以下錯誤。使用golang exec執行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() 
} 

編輯:在評論後,我試圖執行命令「碼頭圖像」。如果我使用sudo運行可執行文件,它將起作用。也就是說,我現在在代碼中使用以下行。

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

在完成構建並運行「sudo ./cmd」之後,我得到了docker images命令的輸出。但是,如果沒有sudo,我仍然可以獲得退出狀態1.但是,即使使用sudo,使用上面的docker run命令,我也沒有輸出。

+0

並運行'泊塢窗images'產生預期的效果,甚至? – Thomasleveil 2014-10-16 19:50:58

+0

是的,碼頭圖像命令工作! (只有當我使用sudo運行生成的可執行文件時才起作用,否則就不能運行)。我在問題上面進行了編輯。 – 2014-10-16 20:26:54

+0

我的意思是不使用你的去程序。 I.E:在控制檯中鍵入'$ docker image'。它沒有sudo工作嗎? – Thomasleveil 2014-10-16 20:48:05

回答

8

感謝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) 
} 

輸出:不使用sudo時

Hello World