Fix relative path execution of docker daemon in reexec.Self()

After the new libcontainer API, the reexec.Self() output of the daemon
binary is used as the libcontainer factory InitPath.  If it is relative,
it can't be found at container start time.  This patch solves the
problem by making sure that we return a rooted/absolute path if a
relative path is used.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
This commit is contained in:
Phil Estes 2015-03-16 15:54:35 -04:00
parent b57fba2430
commit c1642c937d

View file

@ -35,8 +35,14 @@ func Self() string {
name := os.Args[0] name := os.Args[0]
if filepath.Base(name) == name { if filepath.Base(name) == name {
if lp, err := exec.LookPath(name); err == nil { if lp, err := exec.LookPath(name); err == nil {
name = lp return lp
} }
} }
// handle conversion of relative paths to absolute
if absName, err := filepath.Abs(name); err == nil {
return absName
}
// if we coudn't get absolute name, return original
// (NOTE: Go only errors on Abs() if os.Getwd fails)
return name return name
} }