Docker 命令速查:run/ps/build/compose 按场景查
按场景整理 Docker 常用命令,覆盖 run、ps、images、build、exec、logs 和 compose,讲清镜像和容器的区别、磁盘清理,以及退出码 137 这类常踩的坑。
Docker 命令速查:按场景查 run/ps/build/compose
我带过几个刚上手容器的同事,发现大家卡住的地方惊人地一致:不是不会敲命令,而是记不住哪个命令对应哪个场景,于是把 rm 和 rmi 搞混,把密钥塞进 --build-arg,或者对着一个退出码 137 的容器干瞪眼。这篇就按真实使用场景把 Docker 常用命令串起来,你查的时候不用先想「这条属于哪一类」,而是想「我现在要干嘛」。
起一个容器:run 的几个标志要分开记
docker run 是日常用得最多的命令,难点全在它的标志上。先看一条最常见的:
docker run -d -p 8080:80 --name web nginx
docker ps
docker logs -f web
docker exec -it web sh
第一行后台跑一个 nginx,把宿主机 8080 映射到容器 80 端口,起个名字叫 web。第二行看它在不在跑,第三行实时跟日志,第四行进容器里调试。这四条覆盖了「起服务、看状态、查日志、进去看看」一整个闭环。
要点是把标志拆开理解,别整块背。-d 是后台,-p 是端口映射,-v 是挂卷,-e 是环境变量,--rm 是容器退出时自动删掉它(注意:删的是容器,不是镜像)。-it 其实是 -i 加 -t 两个标志,合起来才有交互终端的意义,单独写哪个都怪。把这几个标志的语义记牢,run 就基本通了。
镜像和容器:rm 删容器,rmi 删镜像
这是新手第一道坎。镜像是模板,容器是模板跑起来的实例。两套命令别混:
docker images
docker build -t myapp:latest .
docker rmi myapp:latest
docker rm web
docker rm 镜像名 会报「no such container」,因为 rm 删的是容器,删镜像得用 rmi(或者 docker image rm)。这条坑我见过太多次,有人删不掉就顺手加 -f,结果把一个正在跑的库给删了。先搞清楚自己要删的是模板还是实例,再决定敲哪个。
清理磁盘:prune 之前先看清楚删什么
跑久了「no space left on device」是迟早的事。清理命令很顺手,但也最容易误删:
docker system df
docker image prune
docker system prune -a
docker volume prune
docker system df 先告诉你镜像、容器、卷各占多少。image prune 默认只清没被任何容器引用的悬空镜像,加 -a 才会清掉所有没在用的镜像,范围大很多。最危险的是 volume prune,卷里通常是数据库这类持久化数据,删了不可逆,动手前务必确认那些卷确实没用了。
Compose:用空格那个,别用横线那个
多容器编排现在统一用 docker compose(中间是空格的 V2 插件)。老的 docker-compose(带横线的 Python 实现)2023 年 9 月已经正式弃用,新装的 Docker Desktop 不带它了。常用命令:
docker compose up -d
docker compose ps
docker compose logs -f
docker compose down
如果换了台干净机器 CI 突然报「command not found」,大概率就是脚本里还写着带横线的旧命令。命令本身没变,把横线改成空格就行。顺带一提,V2 默认开 BuildKit,compose.yaml 也不再需要写 version: 字段了。
退出码 137 / 125 / 126 / 127:每个码是一种死法
容器挂了别只看日志,退出码本身就是线索。137 等于 128 加 SIGKILL(9),几乎都是内核 OOM killer 干的,内存超了。确认一下:
docker inspect --format "{{.State.OOMKilled}}" web
返回 true 就加 --memory 或者修内存泄漏。125 是 docker 自己报错(flag 写错、镜像不存在);126 是找到了命令但不可执行,多半脚本忘了 chmod +x;127 是容器里压根没这个命令,alpine 的经典坑,它只有 sh 没 bash,要么改用 sh 要么 apk add --no-cache bash。把这四个码记住,排查能省一半时间。
我自己最常用的反而不是某一条神命令,而是「先看退出码再决定查哪类」这个习惯。容器一挂先 docker ps -a 看退出码,是 137 就查内存,是 127 就查命令名,方向对了再去翻日志,比一上来就埋头读 stdout 高效得多。
把速查放手边
这些命令背下来不现实,需要时能秒查到才是关键。完整的 80+ 条命令、每条带常见坑和真实例子,都在 Docker 命令速查 里,搜索框跨命令、说明、坑、例子四个字段一起过滤,输入「OOM」也能命中退出码 137 那条。容器之外,运维和开发每周要 Google 的还有 Git,配套的 Git 命令速查 也整理好了,一起用更顺手。
Made by Toolora · Updated 2026-06-13