diff --git a/execdriver/lxc/driver.go b/execdriver/lxc/driver.go index b398cb1a37..9abec8ac3f 100644 --- a/execdriver/lxc/driver.go +++ b/execdriver/lxc/driver.go @@ -21,6 +21,10 @@ const DriverName = "lxc" func init() { execdriver.RegisterInitFunc(DriverName, func(args *execdriver.InitArgs) error { + if err := setupEnv(args); err != nil { + return err + } + if err := setupHostname(args); err != nil { return err } diff --git a/execdriver/lxc/init.go b/execdriver/lxc/init.go index e138915212..0f134088a3 100644 --- a/execdriver/lxc/init.go +++ b/execdriver/lxc/init.go @@ -1,17 +1,47 @@ package lxc import ( + "encoding/json" "fmt" "github.com/dotcloud/docker/execdriver" "github.com/dotcloud/docker/pkg/netlink" "github.com/dotcloud/docker/pkg/user" "github.com/syndtr/gocapability/capability" + "io/ioutil" "net" "os" "strings" "syscall" ) +// Clear environment pollution introduced by lxc-start +func setupEnv(args *execdriver.InitArgs) error { + // Get env + var env []string + content, err := ioutil.ReadFile(".dockerenv") + if err != nil { + return fmt.Errorf("Unable to load environment variables: %v", err) + } + if err := json.Unmarshal(content, &env); err != nil { + return fmt.Errorf("Unable to unmarshal environment variables: %v", err) + } + // Propagate the plugin-specific container env variable + env = append(env, "container="+os.Getenv("container")) + + args.Env = env + + os.Clearenv() + for _, kv := range args.Env { + parts := strings.SplitN(kv, "=", 2) + if len(parts) == 1 { + parts = append(parts, "") + } + os.Setenv(parts[0], parts[1]) + } + + return nil +} + func setupHostname(args *execdriver.InitArgs) error { hostname := getEnv(args, "HOSTNAME") if hostname == "" { diff --git a/sysinit/sysinit.go b/sysinit/sysinit.go index c84c05982c..56508b105d 100644 --- a/sysinit/sysinit.go +++ b/sysinit/sysinit.go @@ -1,33 +1,16 @@ package sysinit import ( - "encoding/json" "flag" "fmt" "github.com/dotcloud/docker/execdriver" _ "github.com/dotcloud/docker/execdriver/lxc" _ "github.com/dotcloud/docker/execdriver/native" - "io/ioutil" "log" "os" - "strings" ) -// Clear environment pollution introduced by lxc-start -func setupEnv(args *execdriver.InitArgs) { - os.Clearenv() - for _, kv := range args.Env { - parts := strings.SplitN(kv, "=", 2) - if len(parts) == 1 { - parts = append(parts, "") - } - os.Setenv(parts[0], parts[1]) - } -} - func executeProgram(args *execdriver.InitArgs) error { - setupEnv(args) - dockerInitFct, err := execdriver.GetInitFunc(args.Driver) if err != nil { panic(err) @@ -59,25 +42,12 @@ func SysInit() { ) flag.Parse() - // Get env - var env []string - content, err := ioutil.ReadFile(".dockerenv") - if err != nil { - log.Fatalf("Unable to load environment variables: %v", err) - } - if err := json.Unmarshal(content, &env); err != nil { - log.Fatalf("Unable to unmarshal environment variables: %v", err) - } - // Propagate the plugin-specific container env variable - env = append(env, "container="+os.Getenv("container")) - args := &execdriver.InitArgs{ User: *user, Gateway: *gateway, Ip: *ip, WorkDir: *workDir, Privileged: *privileged, - Env: env, Args: flag.Args(), Mtu: *mtu, Driver: *driver,