From af11b5e7b427d8bf3519ccca8ea66dc409b367b0 Mon Sep 17 00:00:00 2001 From: "Hongli Lai (Phusion)" Date: Mon, 12 May 2014 16:13:39 +0200 Subject: [PATCH] Early in the my_init initialization process, do not overwrite already-defined environment variables by the ones in /etc/container_environment. Closes GH-52. --- Changelog.md | 1 + image/my_init | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index 1274238..88bb256 100644 --- a/Changelog.md +++ b/Changelog.md @@ -10,6 +10,7 @@ If you intended on adding a newline to the value, ensure you have *two* trailing newlines: echo -e "my_value\n" > /etc/container_environment/FOO + * It was not possible to use `docker run -e` to override environment variables defined in /etc/container_environment. This has been fixed (GH-52). Thanks to Stuart Campbell for reporting this bug. ## 0.9.9 (release date: 2014-03-25) diff --git a/image/my_init b/image/my_init index 983b65c..4a97f8e 100755 --- a/image/my_init +++ b/image/my_init @@ -54,7 +54,7 @@ def is_exe(path): except OSError: return False -def import_envvars(clear_existing_environment = True): +def import_envvars(clear_existing_environment = True, override_existing_environment = True): new_env = {} for envfile in listdir("/etc/container_environment"): name = os.path.basename(envfile) @@ -67,7 +67,8 @@ def import_envvars(clear_existing_environment = True): if clear_existing_environment: os.environ.clear() for name, value in new_env.items(): - os.environ[name] = value + if override_existing_environment or not name in os.environ: + os.environ[name] = value def export_envvars(to_dir = True): shell_dump = "" @@ -227,7 +228,7 @@ def install_insecure_key(): run_command_killable("/usr/sbin/enable_insecure_key") def main(args): - import_envvars(False) + import_envvars(False, False) export_envvars() if args.enable_insecure_key: