From df75fc62c8316bce058bbdda29f66af9dcc5573a Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Thu, 11 Jul 2019 09:25:38 -0400 Subject: Add support for -env-host This flag passes the host environment into the container. The basic idea is to leak all environment variables from the host into the container. Environment variables from the image, and passed in via --env and --env-file will override the host environment. Signed-off-by: Daniel J Walsh --- cmd/podman/common.go | 3 +++ cmd/podman/shared/create.go | 10 ++++++++++ cmd/podman/shared/intermediate.go | 1 + 3 files changed, 14 insertions(+) (limited to 'cmd/podman') diff --git a/cmd/podman/common.go b/cmd/podman/common.go index 50f3d9a7b..96a1c2244 100644 --- a/cmd/podman/common.go +++ b/cmd/podman/common.go @@ -221,6 +221,9 @@ func getCreateFlags(c *cliconfig.PodmanCommand) { "env", "e", []string{}, "Set environment variables in container", ) + createFlags.Bool( + "env-host", false, "Use all current host environment variables in container", + ) createFlags.StringSlice( "env-file", []string{}, "Read in a file of environment variables", diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go index f401d3cf5..736a682eb 100644 --- a/cmd/podman/shared/create.go +++ b/cmd/podman/shared/create.go @@ -483,6 +483,16 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod. // ENVIRONMENT VARIABLES env := EnvVariablesFromData(data) + if c.Bool("env-host") { + for _, e := range os.Environ() { + pair := strings.SplitN(e, "=", 2) + if _, ok := env[pair[0]]; !ok { + if len(pair) > 1 { + env[pair[0]] = pair[1] + } + } + } + } if err := parse.ReadKVStrings(env, c.StringSlice("env-file"), c.StringArray("env")); err != nil { return nil, errors.Wrapf(err, "unable to process environment variables") } diff --git a/cmd/podman/shared/intermediate.go b/cmd/podman/shared/intermediate.go index eecd1604c..855f84086 100644 --- a/cmd/podman/shared/intermediate.go +++ b/cmd/podman/shared/intermediate.go @@ -393,6 +393,7 @@ func NewIntermediateLayer(c *cliconfig.PodmanCommand, remote bool) GenericCLIRes m["dns-search"] = newCRStringSlice(c, "dns-search") m["entrypoint"] = newCRString(c, "entrypoint") m["env"] = newCRStringArray(c, "env") + m["env-host"] = newCRBool(c, "env-host") m["env-file"] = newCRStringSlice(c, "env-file") m["expose"] = newCRStringSlice(c, "expose") m["gidmap"] = newCRStringSlice(c, "gidmap") -- cgit v1.2.3-54-g00ecf