Executing docker command using golang exec fails

I am using cmd.go (see below) to execute a docker command but it fails. I do the following steps to execute and get the following error.

go build
sudo ./cmd

Output:

  • Neither “docker stop”, “docker kill” nor “docker -f rm” works
  • Can docker-compose directly reference other docker-compose files and start everything in them?
  • Vagrant and Docker not playing nice
  • brief overview of current docker workflow with nginx
  • how to correctly remove previous commits of an image in order to build it from the very scratch
  • bash script command “trap” doesn't work in docker container
  • docker run -v ~/exp/a.out:/a.out ubuntu:14.04 /a.out -m 10m
    2014/10/16 14:32:12 exit status 1
    

    On the other hand running directly as

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

    results in the correct output of a.out.

    Hello World
    

    This is the code of cmd.go. How can I get it to work? Thanks!

    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()
    }
    

    EDIT: After a comment, I tried executing the command “docker images”. It works if I run the executable with sudo. That is, I am using the following line in the code now.

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

    After doing go build and running “sudo ./cmd”, I get the output of docker images command. However, without sudo, I still get exit status 1. But with docker run command above even with sudo, I don’t get an output.

  • Script test to see if a tool is already loaded?
  • Where does kubernete's kubelet create service environment variables?
  • docker with mode and mongo using massive amounts of disk space
  • Creating Docker Base Image from a Dockerfile?
  • Docker node express volume changes in the host not reflected in the container
  • Can't get Pod info in the kubernetes cluster
  • One Solution collect form web for “Executing docker command using golang exec fails”

    Thanks to Os Exec Sudo Command in Go, I am now able to do what I want.

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

    Output:

    Hello World
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.