docker inspect 可直接查看容器实际运行时的完整启动配置,重点包括 .Config.Cmd、.Config.Entrypoint 和 .HostConfig.RestartPolicy.Name 等字段,精准反映真实状态而非 Dockerfile 或命令行预期;相比 docker ps -a 的简略输出,它提供环境变量、挂载路径、端口映射细节等全量信息,支持 --format 提取关键项,且配置受镜像、run 参数、compose 文件和 docker update 四层叠加影响。

docker inspect 能看到哪些启动配置
直接看 docker inspect 输出是最准的,它反映容器**实际运行时**的配置,不是 Dockerfile 里写的、也不是你敲命令时想当然的。重点看三个字段:.Config.Cmd(覆盖镜像默认命令)、.Config.Entrypoint(执行前预置的封装层)、.HostConfig.RestartPolicy.Name(重启策略)。这些字段不靠猜,全在 JSON 里原样呈现。
为什么 docker ps -a 不够用
docker ps -a 只显示容器名、状态、端口映射和最简略的命令片段,比如只显示 "nginx -g daemon off;",但完全看不到环境变量、挂载路径、用户设置或 Capabilities。更关键的是,如果容器已经退出,docker ps -a 里的 COMMAND 列可能被截断或显示为 "/bin/sh -c nginx..." 这种 shell 封装形式,根本看不出原始意图。真正要复现或审计,必须进 inspect 看完整结构。
快速提取常用配置的命令组合
别每次翻完整 JSON,用这几个带 --format 的命令直取关键项:
-
docker inspect --format='{{.Config.Cmd}}'—— 查 CMD -
docker inspect --format='{{.Config.Entrypoint}}'—— 查 ENTRYPOINT -
docker inspect --format='{{.HostConfig.Binds}}'—— 查卷挂载(含宿主机路径) -
docker inspect --format='{{.Config.Env}}'—— 查全部环境变量 -
docker inspect --format='{{.NetworkSettings.Ports}}'—— 查端口映射细节
注意:所有 --format 中的点号路径必须严格匹配,大小写不能错,比如 .HostConfig 不是 .hostconfig,否则返回空。
容易被忽略的配置来源
新容器的最终配置不是单点决定的,而是四层叠加的结果:镜像内置的 ENTRYPOINT/CMD → docker run 命令行参数 → docker-compose.yml 中的 command/entrypoint 字段 → 容器运行时通过 docker update 动态改过的 RestartPolicy 或内存限制。其中最后一种修改不会体现在 docker inspect 的 .Config 下,而是在 .HostConfig 或 .State 里。所以如果发现配置和预期不符,先确认有没有人手动执行过 docker update。


















