From 6a12685bb7eaa5744c5a115ffe12f3a4d80093bb Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Tue, 27 Sep 2016 12:51:42 +0200 Subject: [PATCH] configure docker-init binary path Signed-off-by: Antonio Murdaca --- api/types/container/host_config.go | 3 +++ daemon/config_unix.go | 2 ++ daemon/oci_linux.go | 15 ++++++++++++--- docs/reference/commandline/dockerd.md | 2 ++ man/dockerd.8.md | 4 ++++ runconfig/opts/parse.go | 2 ++ 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/api/types/container/host_config.go b/api/types/container/host_config.go index 9f4ada250b..caa1371371 100644 --- a/api/types/container/host_config.go +++ b/api/types/container/host_config.go @@ -324,4 +324,7 @@ type HostConfig struct { // Run a custom init inside the container, if null, use the daemon's configured settings Init *bool `json:",omitempty"` + + // Custom init path + InitPath string `json:",omitempty"` } diff --git a/daemon/config_unix.go b/daemon/config_unix.go index 050d789cda..55f56f3eb1 100644 --- a/daemon/config_unix.go +++ b/daemon/config_unix.go @@ -36,6 +36,7 @@ type Config struct { DefaultRuntime string `json:"default-runtime,omitempty"` OOMScoreAdjust int `json:"oom-score-adjust,omitempty"` Init bool `json:"init,omitempty"` + InitPath string `json:"init-path,omitempty"` } // bridgeConfig stores all the bridge driver specific @@ -93,6 +94,7 @@ func (config *Config) InstallFlags(flags *pflag.FlagSet) { flags.StringVar(&config.DefaultRuntime, "default-runtime", stockRuntimeName, "Default OCI runtime for containers") flags.IntVar(&config.OOMScoreAdjust, "oom-score-adjust", -500, "Set the oom_score_adj for the daemon") flags.BoolVar(&config.Init, "init", false, "Run an init in the container to forward signals and reap processes") + flags.StringVar(&config.InitPath, "init-path", "", "Path to the docker-init binary") config.attachExperimentalFlags(flags) } diff --git a/daemon/oci_linux.go b/daemon/oci_linux.go index e74ca33a65..a5f3b39d1e 100644 --- a/daemon/oci_linux.go +++ b/daemon/oci_linux.go @@ -594,9 +594,18 @@ func (daemon *Daemon) populateCommonSpec(s *specs.Spec, c *container.Container) if (c.HostConfig.Init != nil && *c.HostConfig.Init) || (c.HostConfig.Init == nil && daemon.configStore.Init) { s.Process.Args = append([]string{"/dev/init", c.Path}, c.Args...) - path, err := exec.LookPath("docker-init") - if err != nil { - return err + var path string + if daemon.configStore.InitPath == "" && c.HostConfig.InitPath == "" { + path, err = exec.LookPath("docker-init") + if err != nil { + return err + } + } + if daemon.configStore.InitPath != "" { + path = daemon.configStore.InitPath + } + if c.HostConfig.InitPath != "" { + path = c.HostConfig.InitPath } s.Mounts = append(s.Mounts, specs.Mount{ Destination: "/dev/init", diff --git a/docs/reference/commandline/dockerd.md b/docs/reference/commandline/dockerd.md index 5fff237b1c..b558895ea5 100644 --- a/docs/reference/commandline/dockerd.md +++ b/docs/reference/commandline/dockerd.md @@ -49,6 +49,7 @@ Options: --help Print usage --icc=true Enable inter-container communication --init Run an init inside containers to forward signals and reap processes + --init-path Path to the docker-init binary --insecure-registry=[] Enable insecure registry communication --ip=0.0.0.0 Default IP when binding container ports --ip-forward=true Enable net.ipv4.ip_forward @@ -1142,6 +1143,7 @@ This is a full example of the allowed configuration options on Linux: "cgroup-parent": "", "default-ulimits": {}, "init": false, + "init-path": "/usr/libexec/docker-init", "ipv6": false, "iptables": false, "ip-forward": false, diff --git a/man/dockerd.8.md b/man/dockerd.8.md index ecbc43c030..503b76061e 100644 --- a/man/dockerd.8.md +++ b/man/dockerd.8.md @@ -35,6 +35,7 @@ dockerd - Enable daemon mode [**--help**] [**--icc**[=*true*]] [**--init**[=*false*]] +[**--init-path**[=*""*]] [**--insecure-registry**[=*[]*]] [**--ip**[=*0.0.0.0*]] [**--ip-forward**[=*true*]] @@ -170,6 +171,9 @@ unix://[/path/to/socket] to use. **--init** Run an init process inside containers for signal forwarding and process reaping. +**--init-path** +Path to the docker-init binary. + **--insecure-registry**=[] Enable insecure registry communication, i.e., enable un-encrypted and/or untrusted communication. diff --git a/runconfig/opts/parse.go b/runconfig/opts/parse.go index 98bca69d4e..0fd48bbb9b 100644 --- a/runconfig/opts/parse.go +++ b/runconfig/opts/parse.go @@ -104,6 +104,7 @@ type ContainerOptions struct { runtime string autoRemove bool init bool + initPath string Image string Args []string @@ -246,6 +247,7 @@ func AddFlags(flags *pflag.FlagSet) *ContainerOptions { flags.StringVar(&copts.runtime, "runtime", "", "Runtime to use for this container") flags.BoolVar(&copts.init, "init", false, "Run an init inside the container that forwards signals and reaps processes") + flags.StringVar(&copts.initPath, "init-path", "", "Path to the docker-init binary") return copts }