Docker 是云原生的核心,在生产环境中掌握常用的运维命令,能让你快速定位并解决容器故障。下面逐一拆解 9 个高频命令,涵盖日志、资源、配置和清理等场景。
1. 查看运行中的容器
docker ps
这条命令会列出当前所有正在运行的容器。输出示例:
CONTAINER ID IMAGE STATUS
a12b34cd56 nginx Up3 days
b23c45de67 redis Up5 days
如果想一次性看到包括已停止在内的所有容器,可以加上 -a:
docker ps -a
2. 查看容器日志
当出现配置错误、数据库连接失败、Redis 连接失败或 JVM 启动异常时,docker logs 是线上排障的第一选择。
查看完整日志:
docker logs 容器ID
实时追踪日志输出:
docker logs -f nginx
只看最近 100 行:
docker logs --tail 100 nginx
只看最近 10 分钟的日志:
docker logs --since 10m nginx
典型场景:应用启动失败,直接执行 docker logs app 观察报错信息。
3. 进入容器内部
docker exec 是线上排查时最常用的命令,可以让你直接“钻进”容器里调试。
如果有 bash,就用:
docker exec -it nginx bash
如果容器精简到没有 bash,换成 sh:
docker exec -it nginx sh
进入之后,你可以:
- 查看配置文件:
cat /etc/nginx/nginx.conf
- 查看进程:
ps -ef
- 查看磁盘使用:
df -h
- 查看网络连接:
netstat -tunlp
4. 查看容器资源占用
使用 docker stats 可以实时监控容器的 CPU、内存等指标,非常适合排查容器网络、Volume 挂载、环境变量或启动参数问题。
docker stats
输出内容会持续刷新,类似:
CONTAINER CPU % MEM USAGE
nginx 2.1% 120MB
redis 0.5% 80MB
如果只想看某一个容器:
docker stats nginx
典型场景:收到 CPU 100% 或内存飙升的告警时,第一时间敲下 docker stats,快速定位出问题的容器。
5. 查看容器详细信息
docker inspect 会输出容器的全部配置元数据,这在排查网络、存储挂载等问题时不可或缺。
查看某个容器的完整信息:
docker inspect nginx
只看 IP 地址:
docker inspect nginx | grep IPAddress
查看挂载的目录:
docker inspect nginx
(从输出中找到 “Mounts” 字段即可)
6. 重启容器
当更新了配置或代码后,用 docker restart 可以快速使新内容生效。
docker restart nginx
也可以同时重启多个容器:
docker restart nginx redis mysql
典型场景:线上发布后执行 docker restart 容器名,让配置更新或代码更新立刻生效。
7. 停止与启动容器
正常停止:
docker stop nginx
正常启动:
docker start nginx
如果容器卡死需要强制终止,用 kill:
docker kill nginx
典型场景:服务维护窗口期间执行 docker stop app,维护完成后执行 docker start app。
8. 查看与删除镜像
docker images
该命令列出本机所有镜像,输出示例:
REPOSITORY TAG
nginx latest
redis 7
mysql 8.0
当服务器磁盘被打满时,可以通过 docker images 查看各镜像体积,果断删除不再使用的镜像:
docker rmi 镜像ID
9. 清理无用资源
Docker 长时间运行后,磁盘空间不足是最常见的问题之一。
先查看空间占用:
docker system df
然后清理停止的容器、未使用的网络、悬空镜像等无用资源:
docker system prune
如果连所有未使用的镜像也一并清掉,加上 -a:
docker system prune -a
要专门清理废弃的 Volume,执行:
docker volume prune
典型场景:线上服务器磁盘使用率超过 90% 时,依次执行 docker system df 和 docker system prune,快速释放磁盘空间。
Docker 线上运维排障口诀
下次遇到故障,照着线上运维场景的口诀来排查,效率会高很多:
服务挂了
docker ps
docker logs
CPU 飙高
docker stats
docker exec
top
网络异常
docker inspect
docker exec
配置问题
docker exec -it 容器 bash
磁盘爆满
docker system df
docker system prune