从Dockerfile中未声明的docker容器中获取环境变量的最简单方法是什么?
例如,通过docker exec容器/bin/bash会话设置的环境变量?
我可以做docker exec容器env | grep ENV_VAR,但我更喜欢只返回值的东西。
我尝试过使用docker exec容器echo“$ENV_VAR”,但替换似乎发生在容器之外,所以我没有从容器中获得env var,而是从我自己的计算机中获得env var。
谢谢。
从Dockerfile中未声明的docker容器中获取环境变量的最简单方法是什么?
例如,通过docker exec容器/bin/bash会话设置的环境变量?
我可以做docker exec容器env | grep ENV_VAR,但我更喜欢只返回值的东西。
我尝试过使用docker exec容器echo“$ENV_VAR”,但替换似乎发生在容器之外,所以我没有从容器中获得env var,而是从我自己的计算机中获得env var。
谢谢。
当前回答
该命令检查主机上的docker栈进程环境:
pidof dockerd containerd containerd-shim | tr ' ' '\n' \
| xargs -L1 -I{} -- sudo xargs -a '/proc/{}/environ' -L1 -0
其他回答
上面的答案都没有向您展示如何从非运行的容器中提取变量(如果您在run中使用echo方法,则不会得到任何输出)。
简单地运行printenv,就像这样:
docker run --rm <container> printenv <MY_VAR>
(注意docker-compose也可以代替docker工作)
在容器内运行echo "$ENV_VAR"以使变量替换在容器中发生的正确方法是:
docker exec <container_id> bash -c 'echo "$ENV_VAR"'
如果你不关心环境变量是什么时候声明的,@aisbaa的答案是有效的。如果你想要环境变量,即使它已经在exec /bin/bash会话中声明了,也可以使用如下代码:
IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1)
它不是很漂亮,但它能完成任务。
要得到值,使用:
echo ${out[1]}
该命令检查主机上的docker栈进程环境:
pidof dockerd containerd containerd-shim | tr ' ' '\n' \
| xargs -L1 -I{} -- sudo xargs -a '/proc/{}/environ' -L1 -0
因为我们处理的是JSON,不像接受的答案,我们不需要执行容器。
docker inspect <NAME|ID> | jq '.[] | .Config.Env'
输出样例
[
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.19.4",
"NJS_VERSION=0.4.4",
"PKG_RELEASE=1~buster"
]
检索特定的变量
docker inspect <NAME|ID> | jq -r '.[].Config.Env[]|select(match("^<VAR_NAME>"))|.[index("=")+1:]'
看到金桥