从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 run命令修改非运行容器的入口点。
使用实例显示PATH环境变量。
使用bash和echo:这个答案声称echo不会产生任何输出,这是不正确的。 docker run——rm——entrypoint bash <container> -c 'echo "$PATH"' 使用printenv docker run——rm——entrypoint printenv <容器>的路径
其他回答
查询所有env变量。
docker exec container env
要得到一个:
docker exec container env | grep VARIABLE | cut -d'=' -f2
在容器内运行echo "$ENV_VAR"以使变量替换在容器中发生的正确方法是:
docker exec <container_id> bash -c 'echo "$ENV_VAR"'
我们可以使用docker run命令修改非运行容器的入口点。
使用实例显示PATH环境变量。
使用bash和echo:这个答案声称echo不会产生任何输出,这是不正确的。 docker run——rm——entrypoint bash <container> -c 'echo "$PATH"' 使用printenv docker run——rm——entrypoint printenv <容器>的路径
如果你不关心环境变量是什么时候声明的,@aisbaa的答案是有效的。如果你想要环境变量,即使它已经在exec /bin/bash会话中声明了,也可以使用如下代码:
IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1)
它不是很漂亮,但它能完成任务。
要得到值,使用:
echo ${out[1]}
使用docker exec的缺点是它需要一个正在运行的容器,所以如果你不确定容器是否正在运行,docker inspect -f可能会很方便。
示例# 1。在指定的容器中输出以空格分隔的环境变量列表:
docker inspect -f \
'{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name
输出如下所示:
ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3
例# 2。输出每个env变量在新行和grep需要的项目,例如,mysql容器的设置可以像这样检索:
docker inspect -f \
'{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \
container_name | grep MYSQL_
将输出:
MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=supersecret
MYSQL_USER=demo
MYSQL_DATABASE=demodb
MYSQL_MAJOR=5.5
MYSQL_VERSION=5.5.52
例# 3。让我们修改上面的例子,以获得一个bash友好的输出,可以直接在你的脚本中使用:
docker inspect -f \
'{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \
container_name | grep MYSQL
将输出:
export MYSQL_PASSWORD=secret
export MYSQL_ROOT_PASSWORD=supersecret
export MYSQL_USER=demo
export MYSQL_DATABASE=demodb
export MYSQL_MAJOR=5.5
export MYSQL_VERSION=5.5.52
如果你想深入了解,可以去go的文本/模板包文档中了解格式的所有细节。