跳到主要内容

Docker 命令速查

填一次,命令跟着变

命令列表

点行首图标复制
65 条

容器(18)

  • docker run -d --name web -p 8080:80 nginx:1.27

    后台跑一个容器:起名、映射端口,返回容器 ID

    `-d` 后台运行;想让容器随宿主重启自启再加 `--restart unless-stopped`

  • docker run --rm -it nginx:1.27 /bin/sh

    前台跑一个用完即删的临时容器,直接进它的 shell

    `--rm` = 退出后自动删除;`-it` 缺一不可,少了 `t` 就没有 TTY、shell 会立刻退出

  • docker ps

    列出正在运行的容器(ID、镜像、端口、状态)

    第一列那个 ID 就是所有命令里的 `{{container}}`;加了 `-a` 连已退出的也列出来

  • docker start my-nginx

    启动一个已停止的容器(保留原来的文件改动)

  • docker stop my-nginx

    优雅停止容器:先发 SIGTERM,10 秒后仍在跑就 SIGKILL

    `docker kill` 直接发 SIGKILL,不做优雅退出,可能丢数据

  • docker restart my-nginx

    重启容器(等于 stop 再 start)

  • docker rm my-nginx

    删除一个**已停止**的容器

    容器里没挂出来(没用 `-v` / 绑定挂载)的数据会一起没;运行中的容器必须加 `-f`

    谨慎
  • docker exec -it my-nginx /bin/bash

    进入正在运行的容器,开一个交互式 shell

    容器必须是**运行中**的;alpine 这类精简镜像没有 bash,用 `/bin/sh`

  • docker exec my-nginx ls -al /

    在容器里执行一条命令,结果直接打到当前终端

    不带 `-it` 更省事,适合脚本里取一条容器内的信息

  • docker cp my-nginx : /app ./

    把容器里的文件 / 目录拷到本机当前目录

  • docker cp ./ my-nginx : /app

    把本机文件 / 目录拷进容器

  • docker inspect my-nginx

    看容器的完整配置 JSON:挂载、网络、环境变量、状态都在里面

  • docker port my-nginx

    查看容器的端口映射关系

  • docker rename my-nginx web

    给容器改名(不必停容器)

  • docker pause my-nginx

    冻结容器里的所有进程(不释放内存,比 stop 更轻)

  • docker top my-nginx

    看容器内正在运行的进程(宿主视角的 PID)

  • docker commit my-nginx nginx:1.27

    把容器当前的文件系统提交成一个新镜像

    调试时的临时手段;正式做法是改 Dockerfile 重新 `docker build`

  • docker diff my-nginx

    列出容器相对镜像改了哪些文件(A 新增 / C 修改 / D 删除)

镜像(7)

  • docker images

    列出本地镜像:仓库、标签、镜像 ID、体积

    同一仓库的多个标签会共享镜像 ID;`docker images -a` 连中间层一起列

  • docker pull nginx:1.27

    从仓库拉取镜像(不写标签默认拉 latest)

    生产上尽量写死标签(`nginx:1.27`),`latest` 会漂移

  • docker rmi nginx:1.27

    删除本地镜像

    有容器(含已停止的)在用这个镜像时删不掉,得先删容器或加 `-f`

    谨慎
  • docker tag nginx:1.27 registry.example.com/app :v1

    给镜像打一个新标签,指向同一个镜像 ID(不复制文件)

  • docker history nginx:1.27

    看镜像的分层构建历史,排查「哪一层把镜像撑大了」

  • docker inspect nginx:1.27

    看镜像的元信息:架构、环境变量、入口命令、层摘要

  • docker save -o image.tar nginx:1.27

    把镜像导出成一个 tar 文件(可离线拷到别的机器)

    `save` / `load` 搬的是镜像;`export` / `import` 搬的是容器文件系统,两者不能混用

构建(3)

  • docker build -t nginx:1.27 .

    用当前目录的 Dockerfile 构建镜像并打标签

    结尾那个 `.` 是构建上下文目录,不是 Dockerfile 路径;`--no-cache` 能排除缓存干扰但慢得多

  • docker build -t nginx:1.27 --build-arg TZ=Asia/Shanghai .

    构建时给 Dockerfile 里的 ARG 传一个值

    `ARG` 只是构建期变量,要传进运行期得再写 `ENV`;别用它传密码(会留在镜像历史里)

  • docker buildx build --platform linux/amd64,linux/arm64 -t registry.example.com/app :v1 --push .

    一次构建多个 CPU 架构的镜像并直接推送到仓库

    需要 Buildx 与 `docker buildx create --use` 建好的 builder,且只能 `--push` 或 `--load` 单平台

网络(5)

  • docker network ls

    列出所有网络(默认的 bridge / host / none 与自定义的)

  • docker network create app-net

    建一个自定义桥接网络,容器之间可用名字互相访问

    只有自定义网络才有内置 DNS;默认 bridge 上的容器只能靠 IP 互访

  • docker network inspect app-net

    看网络里连了哪些容器、各自的 IP 与网关

  • docker network connect app-net my-nginx

    把一个运行中的容器接进指定网络(可同时接多个)

  • docker network rm app-net

    删除网络

    还有容器连着时删不掉,先 `disconnect` 或删容器

    谨慎

卷与数据(7)

  • docker volume ls

    列出所有数据卷

  • docker volume create app-data

    建一个命名卷(比绑定挂载更好移植)

  • docker volume inspect app-data

    看卷在宿主机上的真实路径与挂载点

  • docker run -d --name web -v app-data : /app nginx:1.27

    把命名卷挂进容器(数据留在卷里,容器删了数据还在)

  • docker run -d --name web -v /srv/app : /app nginx:1.27

    把宿主机目录绑定挂载进容器(改代码立刻生效,开发常用)

    宿主目录必须写**绝对路径**;路径不存在时 docker 会自建一个目录而不是报错

  • docker run --rm -v app-data :/data -v "$(pwd)":/backup nginx:1.27 tar czf /backup/ app-data .tar.gz -C /data .

    把卷打包成一个 tar.gz 存到当前目录(不用停容器)

    Windows 的 PowerShell 里 `$(pwd)` 要换成 `${PWD}`

  • docker volume rm app-data

    删除一个数据卷

    **卷里的数据一起消失且无法恢复**;有容器(含已停止的)在用就删不掉

    危险

日志与排查(6)

  • docker logs my-nginx

    打印容器的主进程输出(stdout / stderr)

    容器日志落在宿主磁盘上,一天几千行也不奇怪 —— 排查时先 `--tail 100` 再看要不要全量

  • docker logs --since 10m my-nginx

    只看最近一段时间的日志(`10m` / `2h` / `2026-09-21T10:00:00`)

  • docker events --filter container= my-nginx

    实时看这个容器的生命周期事件(start / die / health_status)

    排查「容器为什么反复重启」最有用的一条:能看到 die 与 exitCode

  • docker inspect -f '{{.State.ExitCode}}' my-nginx

    查容器的退出码(137 = 被 kill,多半是 OOM 或超时)

    外面那层单引号是必须的:里面的 `{{…}}` 是 Go 模板,交给 docker 解析而不是 shell

  • docker inspect -f '{{json .State.Health}}' my-nginx

    看健康检查的最新结果与失败次数

  • docker exec my-nginx cat /etc/os-release

    确认容器里到底是什么系统(排查镜像基底用)

资源与状态(5)

  • docker stats --no-stream

    各容器的 CPU、内存、网络与磁盘 IO 实时占用

    `--no-stream` 只取一次快照(适合贴给别人看);不加它是持续刷新的面板

  • docker system df

    看镜像、容器、卷、构建缓存各占了多少磁盘

    「RECLAIMABLE」那一列就是清理能回收的额度;先看这里再决定要不要 prune

  • docker update --memory 512m --cpus 1 my-nginx

    给运行中的容器改资源上限(不用重建容器)

    同时给 memory 与 memory-swap 才能设死上限;只给 memory 时 swap 会自动补一份

  • docker info

    看 Docker 引擎的整体状态:容器数、存储驱动、镜像加速器、资源总量

  • docker version

    分别看客户端与服务端的版本(两者不一致常是连接问题的根因)

清理(6)

  • docker stop $(docker ps -q)

    停止所有正在运行的容器

    `docker ps -q` 只输出 ID 列;这条会一次性停掉本机所有容器,共用机器上先确认

    谨慎
  • docker container prune -f

    删掉所有已停止的容器

    已停止的容器删掉就找不回来;没挂到卷 / 宿主目录上的数据一起没

    谨慎
  • docker image prune -a -f

    删掉所有没被容器使用的镜像(不止悬空的那些)

    不带 `-a` 只删 `<none>` 的悬空镜像;带 `-a` 会把「现在没容器用」的镜像全删,下次要重新 pull

    危险
  • docker builder prune -f

    清掉构建缓存

    构建缓存动辄几个 G;清掉之后下一次构建会明显变慢

    谨慎
  • docker system prune -f

    一次清掉已停止的容器、悬空镜像、未使用的网络与构建缓存

    **默认不动卷**(数据安全);加了 `--volumes` 才会删未使用的卷,那条要格外确认

    谨慎
  • docker rm -f $(docker ps -aq)

    强制删除本机所有容器(运行中的也删)

    `-a -q` 是「全部容器只看 ID」;没挂出来的数据会一起消失

    危险

Compose 与仓库(8)

  • docker compose up -d

    按 compose.yaml 起(或更新)整套服务,后台运行

    改过镜像相关配置就得加 `--build`;`--dry-run` 只打印将要做的动作,不动容器

  • docker compose down

    停止并删除这套编排起的容器与网络(镜像保留)

    `down` 默认保留命名卷;`-v` 会把卷一起删,**数据不可恢复**

    谨慎
  • docker compose ps

    看这套编排里各服务的状态与端口

  • docker compose logs -f --tail 100

    实时跟踪整套服务的日志(各服务前缀区分)

  • docker compose exec web /bin/sh

    进到某个服务的容器里(服务名而不是容器名)

    `docker compose exec` 的参数是 **compose.yaml 里的服务名**,跟容器名不一定相同

  • docker compose config

    把 compose.yaml(含 .env 插值、多文件合并)渲染成最终生效的配置

    「环境变量没替换进去」这类问题,先在这条命令的输出里确认最终值

  • docker login registry.example.com

    登录镜像仓库(凭据存到 ~/.docker/config.json)

    密码建议用访问令牌;凭据是**明文存在本机**的,共用机器上留意

  • docker push registry.example.com/app :v1

    把本地镜像推到仓库(要先 tag 成带仓库前缀的名字)

    镜像名不带仓库前缀时会推到 Docker Hub 的默认账号下,推错地方很难删

命令里加绿底的是你填的值,纯绿字是示例值;本页不执行任何命令,复制到终端里运行。