docker 查看容器(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
在现代软件开发中,Docker 已经成为容器化技术的核心工具,它简化了应用程序的部署和运行环境管理。然而,随着容器数量的增加,如何高效地查看、管理和调试容器成为开发者必须掌握的技能。本文将围绕“docker 查看容器”这一核心主题,从基础命令到高级技巧,结合实际案例,帮助读者系统掌握容器状态的查看方法,并理解其背后的技术逻辑。
Docker 提供了简单直观的命令来查看当前运行的容器。最常用的命令是 docker ps
,其功能类似于操作系统的进程列表。
docker ps
执行此命令后,会显示所有正在运行的容器信息,包括容器 ID、镜像名称、创建时间、端口映射和容器名称等。例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123 nginx:latest "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp my-nginx
关键参数解析:
-a
:显示所有容器(包括已停止的)。--format
:自定义输出格式,例如:docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
这会以表格形式展示容器 ID、名称和状态。
比喻理解:
可以将 docker ps
比作“停车场的监控摄像头”,它只记录当前正在运行的容器(即“停在场内的车辆”),而不会显示已停止的容器(“离开的车辆”)。
如果需要查看所有容器(无论是否运行),可以使用 docker ps -a
命令。例如:
docker ps -a
输出结果将包含已停止的容器状态(如 Exited (0)
),帮助开发者快速定位异常退出的容器。
常见场景:
当开发过程中某个容器意外停止,通过 docker ps -a
可以快速找到其 ID,并进一步使用 docker logs
查看日志(后续章节会详细讲解)。
仅查看基础信息可能无法满足需求,开发者有时需要深入容器的配置细节。此时,docker inspect
命令就派上用场了。
docker inspect [容器 ID 或名称]
例如:
docker inspect my-nginx
该命令会返回容器的 JSON 格式详细信息,包括网络配置、挂载点、环境变量等。例如:
[
{
"Id": "abc123...",
"Config": {
"Hostname": "my-nginx",
"Env": ["PATH=/usr/local/sbin:...", "NGINX_VERSION=1.21.3..."],
"Image": "nginx:latest"
},
"NetworkSettings": {
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
}
]
}
}
}
]
比喻理解:
docker inspect
相当于“容器的身份证”,包含了所有与容器相关的配置细节,开发者可以通过它了解容器的“出生证明”和“运行规则”。
随着容器数量增加,手动筛选信息会变得低效。Docker 提供了 -f
或 --filter
参数,支持按条件过滤容器列表。
常见过滤条件:
-
按状态过滤:
docker ps -f status=running # 仅显示运行中的容器 docker ps -f status=exited # 仅显示已停止的容器
-
按名称或镜像过滤:
docker ps -f name=web* # 匹配名称以 web 开头的容器 docker ps -f ancestor=nginx # 显示基于 nginx 镜像的容器
-
组合过滤条件:
docker ps -f status=exited -f ancestor=nginx
比喻理解:
这类似于在超市货架上按“价格区间”和“品牌”筛选商品,通过多个条件快速定位目标容器。
对于复杂场景,可以结合其他命令(如 grep
、awk
)或编写脚本实现自动化操作。
案例 1:统计运行中的容器数量
docker ps --format "{{.Status}}" | grep -c "Up"
案例 2:导出所有容器的 ID 列表
docker ps -a --format "{{.ID}}" > container_ids.txt
案例 3:通过 Shell 脚本批量查看容器日志
#!/bin/bash
containers=$(docker ps -q)
for container in $containers; do
echo "日志信息:$container"
docker logs $container
done
假设开发者正在构建一个多服务应用,包含前端、后端和数据库三个容器。某天发现前端页面无法访问,需要排查问题。
步骤 1:查看所有容器状态
docker ps -a
输出显示前端容器处于 Exited
状态,而其他容器正常。
步骤 2:获取前端容器的详细信息
docker inspect frontend-container
发现其端口映射配置错误(如未暴露 3000 端口)。
步骤 3:检查容器日志
docker logs frontend-container
日志显示启动脚本缺少依赖项。
通过以上步骤,开发者快速定位问题并修复了容器配置。
“docker 查看容器”是开发者日常工作中不可或缺的技能。从基础的 docker ps
到高级的 docker inspect
,每条命令都像一把钥匙,帮助开发者打开容器的“黑箱”。通过结合过滤条件和组合命令,可以进一步提升排查问题的效率。建议读者通过实际操作练习这些命令,并尝试在项目中应用,逐步掌握容器管理的核心逻辑。记住,实践是掌握技术的最佳途径!