从Docker容器获取环境variables
从Docker容器中获取未在Dockerfile中声明的环境variables的最简单方法是什么 ?
例如,通过一些docker exec container /bin/bash
会话设置的环境variables?
我可以做docker exec container env | grep ENV_VAR
docker exec container env | grep ENV_VAR
,但我更喜欢的东西,只是返回值。
我已经尝试使用docker exec container echo "$ENV_VAR"
,但替代似乎发生在容器外,所以我没有从容器中获得env var,而是从我自己的计算机中获得env var。
谢谢。
在容器中运行echo "$ENV_VAR"
的正确方法,以便在容器中进行variablesreplace:
docker exec container bash -c 'echo "$ENV_VAR"'
你可以使用printenv VARIABLE
而不是/bin/bash -c 'echo $VARIABLE
。 它更简单,它不会执行replace:
docker exec container printenv VARIABLE
要查看所有的envvariables:
docker exec container env
得到一个:
docker exec container env | grep VARIABLE | cut -d'=' -f2
使用docker exec
的缺点是它需要一个正在运行的容器,所以如果你不确定容器是否在运行, docker inspect -f
可能会很方便。
示例#1。 输出指定容器中空格分隔的环境variables的列表:
docker inspect -f \ '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name
输出将如下所示:
ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3
例#2。 在新行上输出每个env var,并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的文本/模板包文档,其中包含格式的所有详细信息。
@ aisbaa的答案如果你不在乎什么时候声明了环境variables的话。 如果你想要这个环境variables,即使它已经在exec /bin/bash
会话中声明了,使用如下的东西:
IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1)
这不是很漂亮,但它完成了工作。
为了获得价值,使用:
echo ${out[1]}
- 如何将环境variables值传递到docker容器中的文件我试图运行
- Docker用env_file参数指定的环境variables在dockerfile中不工作
- Kubernetes:pipe理环境configuration
- 在运行docker contianer中设置环境variables
- docker-compose的环境variables在Jenkins里面
- 什么是为Docker设置ENVvariablesCONTENT_TRUST的最佳位置
- docker运行`输出到bashvariables – 奇怪的行为
- 将Heroku环境variables传递给Docker实例
- 如果设置了variables,如何configurationdocker组合使用给定的子网,或者如果不是,select自己?