mirror of
https://github.com/drone-plugins/github-actions
synced 2024-11-15 02:56:25 +01:00
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
|
// +build !windows
|
||
|
|
||
|
package daemon
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
const dockerExe = "/usr/local/bin/docker"
|
||
|
const dockerdExe = "/usr/local/bin/dockerd"
|
||
|
|
||
|
func startDaemon(daemon Daemon) {
|
||
|
cmd := commandDaemon(daemon)
|
||
|
if daemon.Debug {
|
||
|
cmd.Stdout = os.Stdout
|
||
|
cmd.Stderr = os.Stderr
|
||
|
} else {
|
||
|
cmd.Stdout = ioutil.Discard
|
||
|
cmd.Stderr = ioutil.Discard
|
||
|
}
|
||
|
go func() {
|
||
|
trace(cmd)
|
||
|
cmd.Run()
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
// helper function to create the docker daemon command.
|
||
|
func commandDaemon(daemon Daemon) *exec.Cmd {
|
||
|
args := []string{
|
||
|
"--data-root", daemon.StoragePath,
|
||
|
"--host=unix:///var/run/docker.sock",
|
||
|
}
|
||
|
|
||
|
if _, err := os.Stat("/etc/docker/default.json"); err == nil {
|
||
|
args = append(args, "--seccomp-profile=/etc/docker/default.json")
|
||
|
}
|
||
|
|
||
|
if daemon.StorageDriver != "" {
|
||
|
args = append(args, "-s", daemon.StorageDriver)
|
||
|
}
|
||
|
if daemon.Insecure && daemon.Registry != "" {
|
||
|
args = append(args, "--insecure-registry", daemon.Registry)
|
||
|
}
|
||
|
if daemon.IPv6 {
|
||
|
args = append(args, "--ipv6")
|
||
|
}
|
||
|
if len(daemon.Mirror) != 0 {
|
||
|
args = append(args, "--registry-mirror", daemon.Mirror)
|
||
|
}
|
||
|
if len(daemon.Bip) != 0 {
|
||
|
args = append(args, "--bip", daemon.Bip)
|
||
|
}
|
||
|
for _, dns := range daemon.DNS {
|
||
|
args = append(args, "--dns", dns)
|
||
|
}
|
||
|
for _, dnsSearch := range daemon.DNSSearch {
|
||
|
args = append(args, "--dns-search", dnsSearch)
|
||
|
}
|
||
|
if len(daemon.MTU) != 0 {
|
||
|
args = append(args, "--mtu", daemon.MTU)
|
||
|
}
|
||
|
if daemon.Experimental {
|
||
|
args = append(args, "--experimental")
|
||
|
}
|
||
|
return exec.Command(dockerdExe, args...)
|
||
|
}
|
||
|
|
||
|
// trace writes each command to stdout with the command wrapped in an xml
|
||
|
// tag so that it can be extracted and displayed in the logs.
|
||
|
func trace(cmd *exec.Cmd) {
|
||
|
fmt.Fprintf(os.Stdout, "+ %s\n", strings.Join(cmd.Args, " "))
|
||
|
}
|