Docker 常用命令速查手册

张开发
2026/6/9 13:16:18 15 分钟阅读
Docker 常用命令速查手册
这篇不求全只求实用。每个命令都是真实工作场景里跑过的有的还附了为什么这么写的解释。镜像相关拉取镜像dockerpull nginx# 拉最新版本latest tagdockerpull nginx:1.25# 拉指定版本生产环境强烈建议这样写dockerpull nginx:1.25-alpine# 拉 alpine 版体积小很多不写版本号默认是latest生产环境用latest有翻车风险——今天 latest 是 1.25明天更新到 1.26 行为可能变了但你的配置没变。指定版本是好习惯。查看本地镜像dockerimages# 列出所有本地镜像dockerimages nginx# 只看 nginx 相关的dockerimages--formattable {{.Repository}}\t{{.Tag}}\t{{.Size}}# 自定义列--format这个参数很有用输出太乱的时候过滤掉不需要的列。删除镜像dockerrmi nginx# 删镜像有容器在用会报错dockerrmi nginx:1.24# 删特定版本dockerrmi$(dockerimages-q)# 删所有本地镜像别在生产机上跑dockerimage prune# 只删没有 tag 的悬空镜像dockerimage prune-a# 删所有没容器在用的镜像docker image prune -a是清理磁盘的好帮手但跑之前先想想是不是所有镜像都可以删。构建镜像dockerbuild-tmyapp:1.0.# 用当前目录的 Dockerfile 构建dockerbuild-tmyapp:1.0-fDockerfile.prod.# 指定 Dockerfile 文件名dockerbuild --no-cache-tmyapp:1.0.# 不用缓存完整重新构建dockerbuild --build-argNODE_ENVprod-tmyapp:1.0.# 传入构建参数调试构建失败时--no-cache能排除缓存干扰因素。日常开发别加这个慢。查看镜像历史dockerhistorymyapp:1.0# 查看镜像各层的构建历史dockerhistory--no-trunc myapp:1.0# 不截断命令显示镜像体积突然很大用history查哪一层占了最多空间比瞎猜快多了。容器生命周期这块命令最多也最容易搞混我按创建 → 运行 → 查看 → 停止 → 删除的顺序来。创建并运行容器# 最基础的启动dockerrun nginx# 后台运行不占用终端dockerrun-dnginx# 后台运行指定名字映射端口dockerrun-d--namemy-nginx-p8080:80 nginx# 交互模式进入容器dockerrun-itubuntu:22.04bash# 运行完自动删容器临时测试用dockerrun--rmalpineechohello# 挂载数据卷dockerrun-d-v/host/path:/container/path nginx# 传入环境变量dockerrun-d-eMYSQL_ROOT_PASSWORDsecret mysql:8.0# 限制内存和 CPU生产建议加上dockerrun-d--memory512m--cpus0.5myapp:1.0# 设置容器挂掉自动重启dockerrun-d--restartalways nginx--restart的几个选项no默认不自动重启always总是重启on-failure只在非 0 退出码时重启unless-stopped除非手动 stop否则总重启推荐生产使用查看容器dockerps# 只看运行中的容器dockerps-a# 看全部含已停止的dockerps-q# 只输出容器 ID方便管道操作dockerps--formattable {{.Names}}\t{{.Status}}\t{{.Ports}}# 自定义格式# 查看容器详细信息网络、挂载、环境变量等所有信息dockerinspect my-nginx# 只取某个字段用 Go templatedockerinspect--format{{.NetworkSettings.IPAddress}}my-nginx# 查看容器占用的资源dockerstats# 实时流式输出所有容器dockerstats my-nginx# 只看指定容器dockerstats --no-stream# 输出一次就结束不滚动docker stats --no-stream我用得很多快速看一眼各容器内存占用脚本里也方便用。启动和停止dockerstart my-nginx# 启动已停止的容器dockerstop my-nginx# 优雅停止发 SIGTERM等 10 秒dockerstop-t30my-nginx# 等 30 秒再强杀dockerkillmy-nginx# 直接 SIGKILL立刻死dockerrestart my-nginx# 等于 stop startdocker stop和docker kill的区别前者给进程机会做清理关数据库连接、写完当前事务后者直接暴力。数据库容器用stop不要用kill。进入运行中的容器# 进入容器开一个 bash shelldockerexec-itmy-nginxbash# 执行单条命令不进交互dockerexecmy-nginx nginx-t# 测试 nginx 配置是否正确dockerexecmy-nginxcat/etc/nginx/nginx.conf# 查看配置文件# 以 root 身份进入容器内默认非 root 时用dockerexec-it--userroot my-appbashdocker exec是我每天用最多的命令之一进去查日志、改配置、测接口非常方便。删除容器dockerrmmy-nginx# 删除已停止的容器dockerrm-fmy-nginx# 强制删除运行中也能删dockerrm$(dockerps-aq)# 删除所有已停止的容器dockercontainer prune# 自动清理所有已停止的容器会确认dockercontainer prune-f# 直接删不确认日志和调试查看日志dockerlogs my-nginx# 看全部日志dockerlogs-fmy-nginx# 实时跟踪相当于 tail -fdockerlogs--tail100my-nginx# 只看最后 100 行dockerlogs--since1h my-nginx# 看最近 1 小时的日志dockerlogs--since2026-04-15T10:00:00my-nginx# 指定时间点后的日志dockerlogs-f--tail50my-nginx# 跟踪从最后 50 行开始--since参数支持相对时间10m、2h、1d和绝对时间排查问题时很实用。查看容器内进程dockertopmy-nginx# 容器内的进程列表容器没响应又不想进去docker top快速看看里面在跑什么。复制文件# 从容器复制到宿主机dockercpmy-nginx:/etc/nginx/nginx.conf ./nginx.conf# 从宿主机复制到容器dockercp./nginx.conf my-nginx:/etc/nginx/nginx.conf临时改配置或者把容器里的日志文件取出来docker cp最直接。网络相关dockernetworkls# 列出所有网络dockernetwork inspect bridge# 查看网络详情哪些容器在里面dockernetwork create mynet# 创建自定义网络dockernetwork connect mynet my-nginx# 把容器加入网络dockernetwork disconnect mynet my-nginx# 把容器移出网络dockernetworkrmmynet# 删除网络dockernetwork prune# 清理所有未使用的网络同一个自定义网络里的容器可以用容器名互相访问不需要写 IP。这个特性在 Docker Compose 里天然就有手动docker run时要记得创建网络再把容器加进去。数据卷dockervolumels# 列出所有数据卷dockervolume create mydata# 创建命名卷dockervolume inspect mydata# 查看卷的详情包括实际存储路径dockervolumermmydata# 删除卷dockervolume prune# 删除所有未使用的卷用docker volume inspect可以看到卷实际存在宿主机哪个目录方便直接去那里备份数据。系统清理Docker 用久了镜像、容器、网络、卷会积累很多垃圾磁盘告急时# 核武器一键清理所有未使用的资源镜像、容器、网络、构建缓存dockersystem prune# 加 -a 连没容器在用的镜像也清了dockersystem prune-a# 加 --volumes 连数据卷也清⚠️ 数据会丢确认再用dockersystem prune-a--volumes# 查看 Docker 占用的磁盘空间dockersystemdf# 详细版看每个镜像/容器/卷各占多少dockersystemdf-vdocker system df先跑一下看看情况再决定清哪些别上来就prune -a --volumes。命令速查总览Docker 命令镜像pull 拉取images 列出rmi 删除build 构建history 查看层push 推送tag 打标签容器run 创建并启动start / stop 启停restart 重启kill 强杀rm 删除ps 列出inspect 详情stats 资源监控exec 进入执行logs 查日志cp 复制文件top 进程列表网络network lsnetwork createnetwork inspectnetwork connect数据卷volume lsvolume createvolume inspectvolume prune系统system dfsystem prunesystem info几个让效率翻倍的小技巧技巧1给长命令起别名在~/.bashrc或~/.zshrc里加aliasdpsdocker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}}aliasdlogsdocker logs -f --tail 100aliasdexecdocker exec -itdexec my-nginx bash比每次打全要快。技巧2用-q配合管道批量操作# 停止所有容器dockerstop$(dockerps-q)# 删除所有已停止的容器dockerrm$(dockerps-aq-fstatusexited)# 删除所有 none 镜像构建产生的垃圾层dockerrmi$(dockerimages-q-fdanglingtrue)技巧3docker run --rm做临时任务# 临时运行一个 Python 脚本跑完自动删容器dockerrun--rm-v$(pwd):/work python:3.11 python /work/script.py# 临时用 curl 测试容器内网络容器里没有 curl 时dockerrun--rm--networkcontainer:my-app curlimages/curlcurlhttp://localhost:8080/health把容器当一次性工具箱跑完就没了干净。技巧4用--filter精准过滤# 只看退出的容器dockerps-a--filterstatusexited# 只看特定镜像跑出来的容器dockerps--filterancestornginx# 只看某个时间之后创建的容器dockerps-a--filtersincemy-container一个真实排查场景的命令串某天收到告警说有个 API 服务没响应完整的排查流程是这样的# 1. 先看容器在不在、什么状态dockerps-a--filternameapi-server# 发现状态是 Exited (137)137 128 9说明被 OOM Killer 干掉了# 2. 看看最后的日志dockerlogs--tail200api-server# 3. 看看容器的资源配置dockerinspect api-server|grep-A5Memory# 4. 重启容器临时恢复dockerstart api-server# 5. 看实时资源占用确认内存是不是一直往上涨dockerstats api-server退出码137的容器十有八九是内存不够被系统杀掉配合inspect看内存限制stats看实时占用基本就能定位问题。命令多但常用的就那三十几个跑几次自然就记住了。有问题评论区留言。

更多文章