Docker Inspect 值得族谱单开一页的命令

2025-11-2 4 11/2

只会 docker psdocker logs?遇到复杂问题基本就懵了。

其实 docker inspect 才是排查问题的大杀器,容器的所有信息都在里面。

1. 基础用法

1.1 查看容器完整信息

# 查看容器所有信息(opsnot常用)
docker inspect my-nginx

# 输出是JSON格式,信息巨多(加班哥提醒!)
docker inspect my-nginx | less

1.2 查看镜像信息

# 查看镜像详情
docker inspect nginx:latest

# 查看镜像分层
docker inspect nginx:latest | grep Layers -A 20

2. 精准提取信息

2.1 获取容器IP

# 方法1:直接获取IP(推荐)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx

# 方法2:获取指定网络的IP(加班哥常用)
docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' my-nginx

# 方法3:用jq处理(需要安装jq)
docker inspect my-nginx | jq -r '.[0].NetworkSettings.IPAddress'

2.2 查看端口映射

# 查看所有端口映射
docker inspect -f '{{.NetworkSettings.Ports}}' my-nginx

# 更清晰的格式
docker inspect my-nginx | grep -A 10 '"Ports"'

# 或者用这个更简单
docker port my-nginx

2.3 查看挂载的数据卷

# 查看所有挂载点
docker inspect -f '{{.Mounts}}' my-nginx

# 更友好的查看方式(加班哥推荐)
docker inspect my-nginx | jq '.[0].Mounts'

# 只看数据卷路径(常用)
docker inspect -f '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}' my-nginx

2.4 查看环境变量

# 查看所有环境变量
docker inspect -f '{{.Config.Env}}' my-nginx

# 用jq格式化
docker inspect my-nginx | jq '.[0].Config.Env'

# 查看是否包含特定环境变量
docker inspect my-nginx | grep MYSQL_ROOT_PASSWORD

2.5 查看容器状态

# 查看运行状态
docker inspect -f '{{.State.Status}}' my-nginx

# 查看容器启动时间
docker inspect -f '{{.State.StartedAt}}' my-nginx

# 查看容器退出代码(排查容器挂掉的原因)
docker inspect -f '{{.State.ExitCode}}' my-nginx

# 查看容器是否在重启
docker inspect -f '{{.State.Restarting}}' my-nginx

3. 网络相关

3.1 查看网络配置

# 查看容器所在网络
docker inspect -f '{{.NetworkSettings.Networks}}' my-nginx

# 查看网关
docker inspect -f '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' my-nginx

# 查看MAC地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' my-nginx

3.2 查看DNS配置

# 查看DNS服务器
docker inspect -f '{{.HostConfig.Dns}}' opsnot-nginx

# 查看/etc/hosts配置
docker inspect -f '{{.HostConfig.ExtraHosts}}' opsnot-nginx

4. 资源限制

4.1 查看内存限制

# 查看内存限制(返回字节数)
docker inspect -f '{{.HostConfig.Memory}}' opsnot-nginx

# 转换成可读格式(需要计算)
docker inspect opsnot-nginx | jq '.[0].HostConfig.Memory / 1024 / 1024'

# 查看内存预留
docker inspect -f '{{.HostConfig.MemoryReservation}}' opsnot-nginx

4.2 查看CPU限制

# 查看CPU配额
docker inspect -f '{{.HostConfig.CpuQuota}}' my-nginx

# 查看CPU权重
docker inspect -f '{{.HostConfig.CpuShares}}' my-nginx

# 查看CPU核心数限制
docker inspect -f '{{.HostConfig.NanoCpus}}' my-nginx

5. 日志相关

5.1 查看日志配置

# 查看日志驱动
docker inspect -f '{{.HostConfig.LogConfig.Type}}' my-nginx

# 查看日志选项(大小限制等)
docker inspect -f '{{.HostConfig.LogConfig.Config}}' my-nginx

# 查看日志路径
docker inspect -f '{{.LogPath}}' my-nginx

6. 重启策略

# 查看重启策略
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' my-nginx

# 查看重启次数
docker inspect -f '{{.RestartCount}}' my-nginx

# 查看最大重启次数
docker inspect -f '{{.HostConfig.RestartPolicy.MaximumRetryCount}}' my-nginx

7. 镜像层信息

# 查看镜像ID
docker inspect -f '{{.Image}}' my-nginx

# 查看镜像的所有层
docker inspect nginx:latest | jq '.[0].RootFS.Layers'

# 查看镜像构建参数
docker inspect nginx:latest | jq '.[0].Config.Cmd'

8. 实战技巧

8.1 批量查询容器信息

# 查询所有容器的IP(opsnot常用)
docker ps -q | xargs -I {} docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' {}

# 查询所有容器的状态
docker ps -aq | xargs docker inspect -f '{{.Name}} {{.State.Status}}'

# opsnot脚本:导出所有容器配置
for container in $(docker ps -q); do
    echo "=== $(docker inspect -f '{{.Name}}' $container) ==="
    docker inspect $container > ${container}_config.json
done

8.2 对比两个容器配置差异

# 导出两个容器配置之后 diff
docker inspect ops-not-container1 > c1.json
docker inspect ops-not-container2 > c2.json
diff c1.json c2.json

# 或者可以用jq对比特定字段(opsnot提示:需要安装jq)
diff <(docker inspect ops-not-container1 | jq '.[0].Config') \
     <(docker inspect ops-not-container2 | jq '.[0].Config')

8.3 检查容器健康状态

# 查看健康检查配置
docker inspect -f '{{.Config.Healthcheck}}' opsnot-kafka

# 查看健康检查结果
docker inspect -f '{{.State.Health.Status}}' opsnot-kafka

# 查看最近的健康检查日志(opsnot常用)
docker inspect opsnot-kafka | jq '.[0].State.Health.Log[-1]'

8.4 查看容器创建命令(反推)

# 虽然无法完全还原,但能看到大部分配置
docker inspect opsnot-tomcat | jq '.[0].Config, .[0].HostConfig'

# 提示:可以用runlike工具还原
# pip install runlike
# runlike opsnot-tomcat

8.5 监控脚本示例

#!/bin/bash
# 容器监控脚本

for container in $(docker ps -q); do
    name=$(docker inspect -f '{{.Name}}' $container)
    status=$(docker inspect -f '{{.State.Status}}' $container)
    restart_count=$(docker inspect -f '{{.RestartCount}}' $container)
    memory=$(docker inspect -f '{{.HostConfig.Memory}}' $container)

    echo "容器: $name"
    echo "  状态: $status"
    echo "  重启次数: $restart_count"
    echo "  内存限制: $((memory/1024/1024))MB"
    echo "---"
done

9. 常用组合命令

9.1 快速诊断容器问题

# 故障诊断一键脚本
#!/bin/bash
CONTAINER=$1

echo "=== 容器基本信息 ==="
docker inspect -f '名称: {{.Name}}' $CONTAINER
docker inspect -f '状态: {{.State.Status}}' $CONTAINER
docker inspect -f '退出码: {{.State.ExitCode}}' $CONTAINER
docker inspect -f '重启次数: {{.RestartCount}}' $CONTAINER

echo -e "\n=== 网络信息 ==="
docker inspect -f 'IP: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER
docker inspect -f '端口: {{.NetworkSettings.Ports}}' $CONTAINER

echo -e "\n=== 资源信息 ==="
docker inspect -f '内存限制: {{.HostConfig.Memory}}' $CONTAINER
docker inspect -f 'CPU限制: {{.HostConfig.NanoCpus}}' $CONTAINER

echo -e "\n=== 日志路径 ==="
docker inspect -f '{{.LogPath}}' $CONTAINER

9.2 生成容器配置报告

# 生成容器配置报告(加班哥常用)
docker inspect ops-not-nginx | jq '{
  Name: .[0].Name,
  Status: .[0].State.Status,
  Image: .[0].Config.Image,
  IP: .[0].NetworkSettings.IPAddress,
  Ports: .[0].NetworkSettings.Ports,
  Volumes: .[0].Mounts,
  Memory: .[0].HostConfig.Memory,
  RestartPolicy: .[0].HostConfig.RestartPolicy
}' > container_report.json

10. 最后说两句

docker inspect 用途极其广泛,建议保存几个常用的查询命令,遇到问题直接复制粘贴,说不定关键时刻能救命。比如一些常见的故障,ip冲突、dns无效、日志暴增、环境变量问题 等等

我现在的习惯是:
1. 容器有问题先看 docker logs
2. 日志看不出来再用 docker inspect 查配置
3. 配置没问题就进容器 docker exec 排查

 

 

- THE END -
Tag:
0

免责申明:本站不以盈利为目的,下载资源均来源于网络,只做学习和交流使用,版权归原作者所有。若作商业用途,请购买正版。由于未及时购买
和付费发生的侵权行为,与本站无关。如果侵犯了您的合法权益,请联系522390482@qq.com删除,提供版权证明文件和侵权内容的具体链接。

共有 0 条评论