在运行docker contianer中设置环境variables

我需要在运行的Docker容器中设置环境variables。 我已经意识到创build容器时设置环境variables的方式。 到目前为止,我发现没有可用的直接方式来做这个与docker和docker计划添加一些新的1.13版本。

但是,我发现有些人能够pipe理它,现在不适合我。 我尝试了下面的方法,但没有为我工作 –

docker exec -it -u=root test /bin/bash -c "export port=8090" 

使用脚本将echo“export port = 8090”复制到/etc/bash.bashrc,然后将其源代码

 docker exec -it test /bin/bash -c "source /etc/bash.bashrc" 

configuration一个脚本中的所有东西,并从主机运行它也没有工作。 当从主机运行脚本时,除“export port = 8090”或“source /etc/bash.bashrc”或“source / root / .bashrc”之外,其他所有命令都成功执行。

任何人都可以解释为什么从主机源文件不能在docker容器中工作,甚至当我设置用户(“ – U =根”)? 任何人都可以帮我解决这个问题吗? 当我从容器内源文件,它完美的作品。 但在我的情况下,我必须从主机做到这一点

注意:我使用docker 1.12,并在ubuntu:16.04和ubuntu:14.04上面试过

如果在docker中有一个正在运行的进程,并且您正在尝试更改docker中的环境variables,那么正在运行的进程将会dynamic更改 – 这将不起作用。 进程的环境variables在启动时进行设置。 你可以在这里看到解决这个问题的方法,但我认为这是不正确的。

相反,我有一个configuration文件,该文件定期读取(或收听)。 而当你想改变configuration改变文件。

如果这不是您的情况,请描述您的情况,以便我们能够更好地为您提供帮助。

我find了一个方法来提供一个运行容器的环境variables。 拳头升级docker引擎。 我正在使用V1.12.5。

用环境variables创build一个脚本 –

 #!/bin/bash echo "export VAR1=VAL1 export VAR2=VAL2" >> /etc/bash.bashrc source /etc/bash.bashrc 

现在开始一个容器。 在这里,'test'是容器名称:

 docker run -idt --name=test ubuntu 

将脚本复制到容器中:

 docker cp script.sh test:/ 

运行脚本:

 docker exec -it test /bin/bash -c "/script.sh" 

重新启动你的容器:

 docker restart test 

转到容器shell

 docker exec -it test /bin/bash 

检查variables

 echo $VAR1