只会 docker ps、docker 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 -
免责申明:本站不以盈利为目的,下载资源均来源于网络,只做学习和交流使用,版权归原作者所有。若作商业用途,请购买正版。由于未及时购买
和付费发生的侵权行为,与本站无关。如果侵犯了您的合法权益,请联系522390482@qq.com删除,提供版权证明文件和侵权内容的具体链接。
如若转载,请注明出处:https://byteooo.cn/archives/1992
共有 0 条评论