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)
Upstream-commit: 334aea3441d9e499b7f999098a16abcb81d16a68
Component: engine
This commit is contained in:
Phil Estes
2015-03-16 15:54:35 -04:00
parent 7e91e1c6c8
commit 7741ef02eb

View File

@ -35,8 +35,14 @@ func Self() string {
name := os.Args[0]
if filepath.Base(name) == name {
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
}