Docker:如何在不重启Docker容器的情况下永久更改env var值

时间:2018-07-11 13:21:53

标签: linux shell docker environment-variables

我有一个已经启动的Docker容器:

我跑步时:docker exec -it myContainer bash

,然后echo $myEnvVar -> 我得到:myEnvVar= value1

我正在尝试更改此env var的值:

我试图做:export myEnvVar=value2在容器内

并从主机服务器:docker exec -it myContainer bash -c "export myEnvVar =value2"

或另外一种方式:docker exec -it -e myEnvVar =value2" myContainer bash

所有这些尝试失败,因为它在当前会话中仅设置此新值2

因此,当我从容器中退出并重新连接到容器时,

我发现我的var仍然等于第一个值myEnvVar= value1

建议在不重新启动容器的情况下处理它?<​​/ strong>

2 个答案:

答案 0 :(得分:0)

不是Docker家伙,但发现了一些有用的线程,可能会有所帮助。

关注线程:https://github.com/moby/moby/issues/8838

您可以尝试一种方法:仅停止docker daemon并在其中更改容器配置

/var/lib/docker/containers/[container-id]/config.json

您可以通过执行找到容器ID

docker inspect [container-name]

答案 1 :(得分:-2)

环境变量是在创建进程时在进程上定义的,并且正在运行的docker容器是正在运行的进程的包装。因此,即使Docker想要实现它,也无法实现您的请求。

您的要求还违反了最佳做法,以使您的容器可丢弃并更换以实施更改。通过修改现有容器,您将创建一个脆弱的“宠物”环境,而不是容错的“牛”环境。

建议更改容器环境变量的解决方案是用定义了所需环境变量的新容器替换容器。如果您有许多要运行容器的设置,请考虑使用docker-compose.yml文件,并使用docker-compose或docker stack deploy部署容器。这样可以轻松地在配置文件中定义新设置,并使用单个“向上”或“部署”命令替换所需的容器。