要完整导出 Docker 容器运行时环境变量,核心是获取实际生效的合并结果:镜像 ENV + 启动 -e/--env-file + docker-compose environment;最可靠方式是 docker exec <容器> env 输出快照,或用 docker-compose config 导出可移植结构化配置,但动态生成、挂载秘密等变量无法静态还原。
要完整导出 Docker 容器运行时的环境变量配置,核心是区分“当前容器实际生效的环境变量”和“构建镜像时定义的静态变量”,并选择合适的方式导出——不是所有变量都能直接打包成可复用的配置文件,但可以完整提取、保存和迁移。
运行中的容器所使用的环境变量,是 镜像中 ENV 指令 + 启动时 -e/--env-file 参数 + docker-compose.yml 中 environment 配置 的最终合并结果。要准确获取它,最可靠的方式是进入容器执行 env 命令:
docker exec -it <容器名或ID> env 直接输出全部变量(按字母排序,含系统变量如 PWD、HOSTNAME)docker exec <容器名> printenv | grep -E '^[A-Z_]+='
docker exec <容器名> env > container-env.txt,得到纯文本快照单纯导出 env 输出无法还原启动逻辑(比如哪些是 -e 设置的、哪些来自 .env 文件)。真正可复用的“完整环境配置”,应包含来源和上下文:
docker-compose,运行 docker-compose config --resolve-image-digests 可输出展开后的完整配置,其中 environment 字段已解析所有变量引用(包括 ${VAR} 替换)docker-compose config > docker-compose-resolved.yml,该文件即为可移植的环境+服务定义docker inspect <容器名> 提取原始配置:docker inspect --format='{{json .Config.Env}}' <容器名> → 得到 JSON 数组,如 ["PATH=/usr/local/sbin:...", "MY_APP=prod"]
导出的变量列表本身不能直接用于下次启动,需配合启动方式还原:
env 输出整理成标准 .env 文件格式(KEY=VALUE,无空格,不带引号),供 docker-compose --env-file 或 docker run --env-file 使用docker secrets 或外部配置中心替代docker inspect 中提取 .HostConfig.Binds、.Config.Cmd 等字段,拼出完整 docker run 命令模板有些变量本质是运行时动态生成的,无法静态保存:
setenv() 新增的变量(非启动时注入)HOSTNAME、IP),每次启动都不同/run/secrets/db_password)注入的内容,inspect 不显示明文env 显示的是最终状态,但丢失了原始定义位置