【问题标题】:Docker : how to change permanantely an env var value inside a docker container without restarting itDocker:如何永久更改 docker 容器内的 env var 值而不重新启动它
【发布时间】:2018-12-19 13:25:40
【问题描述】:

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

当我跑步时:docker exec -it myContainer bash

然后echo $myEnvVar -> 我明白了:myEnvVar= value1

我正在尝试更改此环境变量的值:

我已经尝试过:export myEnvVar=value2 在容器内

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

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

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

当我退出容器并重新连接到它时,

我发现我的var还是等于第一个值myEnvVar= value1

建议在不重启容器的情况下处理它?

【问题讨论】:

  • 这与 docker 无关,与 shell 的工作方式有关。您正在尝试从外部修改正在运行的 shell 的环境,这是不可能的。

标签: linux shell docker environment-variables


【解决方案1】:

不是码头工人,但发现了一些有用的线程,可能会有所帮助。

关注主题:https://github.com/moby/moby/issues/8838

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

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

可以通过执行找到container-id

docker inspect [container-name]

【讨论】:

    【解决方案2】:

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

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

    更改容器环境变量的推荐解决方案是将容器替换为已定义所需环境变量的新容器。当您有很多设置来运行您的容器时,请考虑使用 docker-compose.yml 文件并使用 docker-compose 或 docker stack deploy 部署您的容器。这使得在配置文件中定义新设置并用单个“up”或“deploy”命令替换所需容器变得容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多