我试图了解在运行的 docker 容器内覆盖环境变量的方法。
我按照其他 SO 帖子的建议尝试了以下选项。每次我通过docker exec -e它设置环境变量时,它都会显示设置的环境变量。在下一次运行时它就会消失。
启动docker的命令:
docker run -itd --rm -e VAR1=test_var1 -e VAR2=test_var2 --name "test" phusion/baseimage:18.04-1.0.0
Run Code Online (Sandbox Code Playgroud)
运行 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$
Run Code Online (Sandbox Code Playgroud)
码头工人版本:
cloud_user@vijaygharge1c:/var/lib/docker$ docker -v
Docker version 19.03.12, build 48a66213fe
cloud_user@vijaygharge1c:/var/lib/docker$
Run Code Online (Sandbox Code Playgroud)
您必须删除并重新创建容器。还有许多其他 Docker 选项(卷安装、网络配置、正在运行的实际映像)在创建容器后也无法更改;删除和重新创建容器是非常例行公事的,这是您需要执行此操作的地方。
\n具体就环境变量而言,进程的环境是在最初创建时设置的(更正确的是,当其前任execve (2) it 时),之后进程可以setenv (3) 其自己的环境,但没有其他方法可以更改它\ xe2\x80\x93 不是它的父级,不是它的子级,没有 root 权限。这是一般的 Unix 声明,并非特定于 Docker。
\n在 Docker 中,还有其他一些环境变化不可见的地方。容器中的进程可以更改其自身的环境(通常在入口点脚本中执行此操作),但这在docker inspect输出或docker execshell 中不可见。在您的示例中,您是docker exec现有容器内的新 shell 并更改该 shell 的环境,但这不会更改主容器进程的环境,也不会更改输出docker inspect。
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |