【发布时间】:2014-12-12 05:52:17
【问题描述】:
我正在使用 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。但是使用上面的 docker run 命令,即使使用 sudo,我也没有得到输出。
【问题讨论】:
-
即使不使用 sudo,运行
docker images是否也会产生预期的结果? -
是的,docker images 命令有效! (它仅在我使用 sudo 运行生成的 go 可执行文件时才有效,否则无效。)我在上面的问题中进行了编辑。
-
我的意思是不使用你的 go 程序。 IE:在控制台中输入
$ docker image。没有 sudo 可以吗? -
不,如果没有控制台中的 sudo,它将无法工作。错误:2014/10/16 16:56:05 获取 http:///var/run/docker.sock/v1.14/ images/json: 拨打 unix /var/run/docker.sock: 权限被拒绝
-
然后将您当前的用户添加到
docker组并打开一个新的shell,您将不再需要sudo。见askubuntu.com/questions/477551/…