daemon_unix.go 760 B

12345678910111213141516171819202122232425262728293031323334353637
  1. // +build !windows
  2. package main
  3. import (
  4. "os"
  5. "os/exec"
  6. "syscall"
  7. )
  8. // CmdDaemon execs dockerd with the same flags
  9. // TODO: add a deprecation warning?
  10. func (p DaemonProxy) CmdDaemon(args ...string) error {
  11. // Use os.Args[1:] so that "global" args are passed to dockerd
  12. args = stripDaemonArg(os.Args[1:])
  13. // TODO: check dirname args[0] first
  14. binaryAbsPath, err := exec.LookPath(daemonBinary)
  15. if err != nil {
  16. return err
  17. }
  18. return syscall.Exec(
  19. binaryAbsPath,
  20. append([]string{daemonBinary}, args...),
  21. os.Environ())
  22. }
  23. // stripDaemonArg removes the `daemon` argument from the list
  24. func stripDaemonArg(args []string) []string {
  25. for i, arg := range args {
  26. if arg == "daemon" {
  27. return append(args[:i], args[i+1:]...)
  28. }
  29. }
  30. return args
  31. }