Exited 状态容器的环境变量保留在 config.v2.json 中,可通过 docker inspect 查看,但无法 exec 访问;重启后自动生效,不可直接修改,需通过 commit、重建或编排工具更新。

容器处于 Exited 状态时,其内部的环境变量不会丢失,但也不会自动生效或可被外部直接读取——它们被完整保留在容器配置中,属于容器元数据的一部分。
环境变量保存在容器配置里
Docker 在创建容器时,会将 -e、--env-file 或 Dockerfile 中的 ENV 指令所定义的环境变量,持久化写入容器的 JSON 配置文件(位于 /var/lib/docker/containers/)。即使容器已停止(Exited),该配置仍存在,可通过以下命令查看:
docker inspect| jq '.[0].Config.Env' docker inspect| grep -A 10 "Env"
输出中可见所有原始设置的环境变量(包括构建时和运行时注入的),与容器是否运行无关。
Exited 状态下无法“访问”这些变量
环境变量只在容器进程启动时由 Docker 守护进程注入到 init 进程的环境空间中。一旦容器退出,其进程空间消失,变量即不可被访问——你不能 exec 进去查(因为没进程)、也不能通过 shell 继承获取。
-
docker exec -it会报错:"Containerenv is not running" - 宿主机 shell 中也完全感知不到该容器的环境变量,它们彼此隔离
重启后变量自动恢复生效
执行 docker start 时,Docker 会重新读取 config.v2.json 中的 Env 字段,并在启动容器主进程时将其作为环境传入。因此:
- 所有原设变量(含空值、含特殊字符的)都会原样复现
- 如果容器入口(entrypoint/cmd)是 shell 脚本,它能正常读取
$VAR - 若容器因错误退出(如主进程立即崩溃),变量仍在,只是没机会被使用
修改 Exited 容器的环境变量
不能直接编辑已存在的 Exited 容器的环境变量(Docker 不提供 docker update --env 类命令),但有可行替代路径:
-
提交为镜像再重跑:用
docker commit,然后new-img docker run -e NEW_VAR=value new-img -
导出配置重建:用
docker inspect提取原 Env,加上新变量,配合docker run命令重新创建容器 -
使用 docker-compose.yml 管理:把环境变量声明在编排文件中,停用后
docker-compose up自动应用最新配置
注意:直接修改 config.v2.json 文件属于非官方操作,可能导致容器无法启动,不建议生产环境使用。










