docker - 如何在正在运行的Docker容器中覆盖环境变量

标签 docker

我正在尝试了解正在运行的Docker容器内覆盖环境变量的方法。
我在其他SO职位上尝试了以下建议的选项。每次我通过docker exec -e设置env变量时,都会向我显示设置的env变量。在下一次运行中,它消失了。
启动docker的命令:

docker run -itd --rm -e VAR1=test_var1 -e VAR2=test_var2  --name "test" phusion/baseimage:18.04-1.0.0
运行docker exec设置环境变量
cloud_user@vijaygharge1c:/var/lib/docker$ docker exec -it -e VAR4=test_var4 test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=de9cf4253ae9
TERM=xterm
VAR1=test_var1
VAR2=test_var2
DEBIAN_FRONTEND=teletype
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_ALL=en_US.UTF-8
VAR4=test_var4
HOME=/root
cloud_user@vijaygharge1c:/var/lib/docker$ docker exec -it -e VAR4=test_var4 test env | grep VAR
VAR1=test_var1
VAR2=test_var2
VAR4=test_var4
cloud_user@vijaygharge1c:/var/lib/docker$ docker exec -it -e VAR3=test_var3 test env | grep VAR
VAR1=test_var1
VAR2=test_var2
VAR3=test_var3
cloud_user@vijaygharge1c:/var/lib/docker$ 
Docker版本:
cloud_user@vijaygharge1c:/var/lib/docker$ docker -v
Docker version 19.03.12, build 48a66213fe
cloud_user@vijaygharge1c:/var/lib/docker$ 

最佳答案

您必须删除并重新创建容器。创建容器后,无法更改许多其他Docker选项(卷装载,网络配置,正在运行的实际镜像)。删除和重新创建容器是非常常规的,这是您需要执行的操作。
具体而言,根据环境变量,在最初创建流程时会设置环境(更正确的是,在其前身 execve (2)时),之后,该流程可以 setenv (3)自己的环境,但除此之外没有其他设置可以更改它–未经 parent 同意,不能更改其父项,也不能更改其子项。这是一般的Unix语句,并不特定于Docker。
在Docker中,还有其他两个地方看不到环境变化。容器中的进程可以更改自己的环境(通常在入口点脚本中执行此操作),但是在docker inspect输出或docker exec Shell中将不可见。在您的示例中,您对现有容器内的新shell进行docker exec并更改了该shell的环境,但这不会更改主容器进程的环境,也不会更改docker inspect输出。

关于docker - 如何在正在运行的Docker容器中覆盖环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63313989/

相关文章:

docker - alpine `apk` 是否有 ubuntu `apt` `--no-install-recommends` 等价物

postgresql - 在docker环境下为tcp md5配置Postgres

django - uWSGI与Docker的Supervisord一起提供的应用程序

java - 如何在docker compose中配置logstash?

docker - Manager Leader 和 Manager 有什么区别

java - 在 openjdk docker 镜像上安装 Rust

docker - 无法从Docker容器连接到计算机的本地主机

python - 有没有办法从 kubernetes pod 中列出主机上的文件?

docker - 新应用程序版本的Docker部署工作流不丢失数据库状态吗?

javascript - 在docker中运行nodejs应用程序并将标准输出重定向到文件