我正在尝试了解正在运行的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/