【问题标题】:Enviroment variable can not be changed in docker container无法在 docker 容器中更改环境变量
【发布时间】:2016-01-01 03:16:35
【问题描述】:
docker run -e HOST_IP:xxxx

我使用 cmd 检查env HOST_IP 是否更改:

docker exec CONTAINER_ID env |grep HOST_IP 

我发现在这些尝试之后它没有改变:

docker exec CONTAINER_ID bash -c 'export HOST_IP=XXX'
docker exec CONTAINER_ID bash -c 'echo HOST_IP=XXX >> ~/.bashrc && source ~/.bashrc'

为什么?是什么控制了env 变量?

【问题讨论】:

    标签: variables docker env


    【解决方案1】:

    可能只是你需要使用表格

    docker run -e NEW_ENV_VAR='new_var_val'
    

    如中所述:How to pass environment variables to docker containers?

    您可以通过向正在运行的容器发出 env 命令来检查:

    sudo docker exec -it running-container-name env
    

    【讨论】:

      【解决方案2】:

      Docker exec 每次都在新会话(bash 或 sh)中运行您的命令,因此您的 exported 环境变量在下次执行时消失。

      如果您想在 Docker 容器运行时持续更改环境变量,我能想到的唯一方法是将变量复制到 /etc/environment 中,如果配置为这样做,bash 将导入它们,或者您也可以 @987654324 @ in .bashrc 效果相同。

      但请记住,在这种情况下,如果在启动时不使用 bash,您在 docker 中的应用程序仍然无法获取它。在这种情况下,您需要让您的应用从文件或类似文件中读取变量。

      【讨论】:

      • 感谢您的解释。但是我的大多数容器都是由 entry_point.sh 自定义或由主管启动的。例如/bin/bash 没有被使用。
      • entry_point.sh 是一个 shell 脚本,不是吗?所以很明显它产生了一个新的shell。在主管情况下,这取决于您的服务配置,它也可能会生成一个 shell。
      • 所以你可以做的是在entry_point.sh 或主管服务配置中添加新的环境变量。 (并重新启动服务)但是您不能只执行命令和 export 和 new var 并且它出现在其他会话中,它不是。
      • 还不明白:我使用 ssh 到容器,应该是 bash 会话。但无论我试图改变变量并通过 supervisorctl 重新启动,env 都没有改变。
      • SSH?在原始问题中似乎没有使用 SSH。
      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2016-05-30
      相关资源
      最近更新 更多