最常用且最轻量的方式是使用printenv VAR_NAME或echo $VAR_NAME在容器内直接获取指定环境变量值;前者更严谨,未设置时不输出,后者需注意shell解析和空值处理。

直接获取指定环境变量,最常用也最轻量的方式是在容器内用 echo 或 printenv 命令,配合变量名即可,无需输出全部变量。
用 echo $VAR_NAME 获取单个变量值
这是最简洁的方法,适合脚本或快速验证:
-
docker exec mycontainer echo $MY_ENV_VAR—— 注意:这里$MY_ENV_VAR是在容器内被 shell 解析的,所以必须确保容器里有可用的 shell(如/bin/sh或/bin/bash) - 如果变量名含特殊字符或不确定是否已定义,推荐加引号:
docker exec mycontainer sh -c 'echo "$MY_ENV_VAR"' - 若变量为空或未设置,
echo $VAR会输出空行;而printenv VAR在变量不存在时默认不输出任何内容,更明确
用 printenv VAR 获取更可靠的单值输出
printenv 是专为读取环境变量设计的命令,行为比 echo $VAR 更严谨:
-
docker exec mycontainer printenv MY_ENV_VAR—— 直接输出变量值,未设置时无输出 - 支持多个变量一次查:
docker exec mycontainer printenv PATH HOME MY_ENV_VAR - 可配合
||提供默认值:docker exec mycontainer sh -c 'printenv DB_HOST || echo "localhost"'
对已停止容器,inspect 也能提取指定变量
如果容器已退出但需要确认当初配置了什么,可用 docker inspect 结合 jq 或文本处理提取:
- 查看所有环境变量键值对:
docker inspect --format='{{range .Config.Env}}{{.}} {{end}}' mycontainer - 用
jq精确匹配(需本地装 jq):docker inspect mycontainer | jq -r '.[0].Config.Env[] | select(startswith("MY_ENV_VAR=")) | capture("(?<key>[^=]+)=(?<value>.*)").value'</value></key> - 纯 shell 方式(兼容性好):
docker inspect mycontainer | grep -o '"MY_ENV_VAR=[^"]*' | cut -d= -f2
镜像层面查预设变量(启动前就知道)
想提前知道某个镜像默认带哪些变量,不用跑容器也能查:
-
docker run --rm -i alpine env | grep ^PATH=—— 启动临时容器并过滤 -
docker inspect alpine:latest | jq -r '.[0].Config.Env[]? | select(test("^TZ="))'—— 查镜像元数据中以 TZ 开头的变量 -
docker history --no-trunc nginx:alpine | grep ENV—— 看 Dockerfile 中显式声明的 ENV 指令


















