Docker CLI 命令速查表 - Docker 常用命令大全

面向应用开发与运维工程师的 Docker 命令手册,覆盖镜像构建、容器生命周期、网络与卷、多容器编排(Compose)与资源清理。相比系统自带的 container 管理工具,Docker 的镜像分层与隔离机制,才是排查容器启动失败、端口映射错位、镜像体积膨胀这些实际问题的关键。读完可从一个镜像开始把服务跑起来,并独立定位启动、网络、磁盘三类最常见的容器故障。

容器与编排·共 82 条命令·最后更新 2026-09-10
dockercompose镜像容器

典型使用场景

面向应用开发与运维工程师:把本地服务用镜像跑起来、构建可复现的镜像、用 Compose 编排多容器,并在容器启动失败、端口映射错位、镜像体积膨胀、磁盘被占满时独立定位与处置。

镜像 Image 8

docker images
列出本地镜像,加 -a 包含中间层
docker pull nginx:alpine
拉取指定标签镜像,省略标签默认 latest
docker build -t app:1.0 .
用当前目录 Dockerfile 构建并打标签
docker rmi <image>
删除镜像,被容器引用时需先停容器或加 -f
docker tag app:1.0 reg/app:1.0
给镜像打新标签,常用于推送前重命名
docker save -o app.tar app:1.0
导出镜像为 tar,离线传输用
docker load -i app.tar
从 tar 文件导入镜像,常用在离线环境
docker pull alpine:3.20 --platform=linux/amd64
拉取指定平台的镜像,ARM Mac 上拉 amd64 镜像

容器 Container 9

docker ps -a
列出所有容器,含已停止的
docker run -d -p 8080:80 --name web nginx
后台运行并映射端口、命名容器
docker exec -it web sh
进入运行中容器的交互 shell
docker logs -f --tail 100 web
跟踪容器日志最后 100 行
docker stop web && docker rm web
停止并删除容器
docker inspect web
查看容器完整配置 JSON,排查网络/挂载
docker start web && docker restart web
启动或重启已停止的容器
docker stats
实时查看所有容器 CPU/内存/网络 I/O 监控
docker top web
查看容器内运行的进程列表

网络与卷 Network & Volume 8

docker network ls
列出网络,排查容器间访问先看这里
docker network create appnet
创建自定义 bridge 网络,容器可用名字互访
docker network connect appnet web
将运行中的容器连接到指定网络
docker volume ls
列出所有数据卷,先看有哪些独立命名卷,排查持久化数据放在哪、容器重启后数据是否保留
docker run -v data:/var/lib/app app
挂载命名卷做持久化
docker run -v $(pwd):/app app
挂载当前目录到容器,开发常用
docker volume create appdata
创建命名数据卷,用于容器间数据共享
docker volume prune
清理所有未被任何容器使用的数据卷

仓库 Registry 6

docker login
登录 Docker Hub,默认推送前需要认证
docker login registry.example.com
登录私有仓库,支持自建 Harbor/Registry
docker push app:1.0
推送镜像到远程仓库,推送前需先 tag
docker pull ubuntu:22.04
从 Docker Hub 拉取 Ubuntu 22.04 镜像
docker search nginx
搜索 Docker Hub 上的官方镜像,查看可用版本
docker logout
退出当前登录的仓库认证

构建与调试 Build & Debug 7

docker build -t app:1.0 --no-cache .
强制重新构建,不使用缓存层
docker build -t app:1.0 --target=dev .
多阶段构建中只构建到指定阶段
docker history app:1.0
查看镜像构建历史,每层大小和命令
docker diff <container>
查看容器文件系统变化,排查写入了哪些文件
docker cp app.conf web:/etc/nginx/conf.d/
将本地配置文件复制到容器中
docker cp web:/var/log/nginx/access.log ./
从容器中复制日志文件到本地
docker events --since 5m
实时查看 Docker 守护进程事件流,监控容器启停

Compose 与清理 9

docker compose up -d
后台启动 compose 项目
docker compose logs -f svc
跟踪指定服务日志
docker compose down
停止并移除容器、网络,加 -v 连卷一起删
docker compose ps
列出 compose 项目中所有服务的容器状态
docker compose restart
重启 compose 项目中所有或指定服务
docker system df
查看镜像/容器/卷占用磁盘情况
docker system prune -a
清理所有未使用镜像和容器,慎用 -a
docker container prune
清理所有已停止的容器
docker image prune -a
清理所有未被使用的镜像,释放磁盘空间

常见问题 FAQ 5

Q: 如何清理所有未使用的 Docker 资源?
A: docker system prune -a 可清理所有未使用的镜像、容器、网络和构建缓存,加 --volumes 也会清理数据卷。
Q: 如何查看容器日志?
A: docker logs <container> 查看完整日志,加 -f 实时跟踪,--tail 50 只看最后 50 行,--since 5m 看最近 5 分钟。
Q: 如何进入运行中的容器?
A: docker exec -it <container> /bin/bash(或 /bin/sh),退出用 exit 或 Ctrl+D。
Q: 如何将宿主机文件复制到容器?
A: docker cp <src> <container>:<dest>,反向复制用 docker cp <container>:<src> <dest>。
Q: 重启策略有哪些?
A: --restart=no(默认)/on-failure/always/unless-stopped,生产环境常用 unless-stopped。

高频补充命令(容量增强 · REQ-02) 30

docker system df
查看 Docker 占用的磁盘空间(镜像/容器/卷/构建缓存)
docker system prune -a --volumes
清理所有未使用的镜像、容器与卷(谨慎,数据不可恢复)
docker buildx build --platform linux/amd64,linux/arm64 -t app:dev --push
构建并推送多架构镜像
docker build --no-cache -t app:dev .
禁用构建缓存,从头重建镜像
docker build -f Dockerfile.prod -t app:prod .
指定非默认名称的 Dockerfile 构建
docker image history <image>
查看镜像各构建层及其大小与指令
docker image inspect <image> --format={{.Size}}
查看镜像大小等元数据
docker stats
实时查看运行容器的 CPU/内存/网络占用
docker top <container>
查看容器内运行的进程
docker diff <container>
查看容器文件系统相对镜像的变更
docker rename <old> <new>
重命名一个已存在的容器
docker update --restart=unless-stopped <container>
修改已有容器的重启策略
docker wait <container>
阻塞等待容器退出并打印退出码
docker pause <container>
暂停容器内所有进程(cgroup freezer)
docker unpause <container>
恢复被暂停的容器进程
docker kill -s SIGTERM <container>
向容器主进程发送指定信号
docker network create <name>
创建自定义桥接/Overlay 网络
docker network connect <net> <container>
将运行中容器接入某个网络
docker network inspect <net>
查看网络的子网、网关与连接容器
docker volume create <name>
创建具名数据卷
docker volume prune
删除所有未被容器引用的卷
docker volume inspect <vol>
查看数据卷挂载点等详情
docker secret create <name> -
从标准输入创建 Swarm secret
docker context ls
查看已配置的远程/本地上下文
docker login
登录镜像仓库(写入 ~/.docker/config.json)
docker logout
退出当前镜像仓库登录态
docker tag <src> <reg>/<img>:<tag>
为镜像打标签,准备推送到远程仓库
docker search <term>
在 Docker Hub 搜索镜像(已弃用但多数环境仍可用)
docker events --since 24h
查看最近 24 小时的守护进程事件流
docker scout quickview <image>
快速查看镜像的漏洞与基线概览

参数矩阵

参数作用示例
-d后台(detached)运行容器docker run -d -p 8080:80 nginx
-p端口映射,格式 主机端口:容器端口docker run -d -p 8080:80 nginx
--name为容器指定可读名字,便于后续操作docker run -d --name web nginx
-v挂载数据卷或绑定目录,持久化数据docker run -v /data:/app/data nginx
--rm容器退出后自动删除,避免残留docker run --rm alpine echo hi
-e向容器内注入环境变量docker run -e NODE_ENV=prod app
--network加入指定网络,容器间可用名字互访docker run --network appnet web
-it分配交互式终端,用于进入容器 shelldocker exec -it web sh
--restart退出后的重启策略(no/on-failure/always)docker run -d --restart unless-stopped web
--platform指定目标架构(ARM Mac 拉 amd64)docker pull --platform=linux/amd64 nginx
--no-cache构建时忽略层缓存,强制重跑所有层docker build --no-cache -t app .
-f指定 Dockerfile 路径docker build -f Dockerfile.prod -t app .

易错点与避坑指南

现象端口映射后仍无法从宿主机其他进程或外网访问容器服务。

原因把 主机:容器 写反,或容器内进程只监听 127.0.0.1 而非 0.0.0.0。

处置确认 -p 8080:80 是「宿主机端口:容器端口」;容器应用需监听 0.0.0.0 才能被外部访问。

现象docker exec 进入容器报 OCI runtime exec failed: exec: "bash": not found。

原因镜像基于 alpine/scratch 等精简镜像,没有内置 bash。

处置改用 sh:docker exec -it web sh;或在 Dockerfile 中 apk add bash 后再用 bash。

现象docker build 每次都重新拉取基础镜像、层缓存不命中。

原因基础镜像用 latest 标签,或把易变的文件(源码)COPY 在不变的文件之前。

处置固定基础镜像版本(如 node:20-alpine);把不常变的依赖安装层放在前面,源码 COPY 放最后。

现象构建或运行报 No space left on device,宿主机磁盘被占满。

原因大量已停止容器、悬空镜像(<none>)、未清理的数据卷长期累积。

处置先 docker system df 看占用,再 docker system prune -a --volumes 清理;生产机设定期清理任务。

现象容器被强制退出,docker inspect 看到 ExitCode 137。

原因内存超限被 OOM Killer 杀掉(137 = SIGKILL)。

处置用 docker stats 看实时内存;为容器设合理 --memory 上限,或优化应用内存占用。

现象在 ARM Mac 上拉取的镜像放到 x86 服务器上跑报错 exec format error。

原因镜像架构与运行环境不一致(arm64 vs amd64)。

处置构建/拉取时显式指定目标平台:docker build --platform=linux/amd64 -t app . 并推送对应架构镜像。

现象在容器内修改了配置文件,重建镜像后改动全部丢失。

原因容器文件系统是临时的,未挂载持久卷。

处置用 -v 挂载命名卷或绑定目录(-v /host/path:/container/path)保存需要保留的状态。

排障路径

  1. 1容器起不来或闪退,先看日志

    docker logs --tail 50 web

    从日志末尾定位启动失败的报错(配置错误、依赖缺失、端口占用)。

  2. 2确认容器退出状态与原因

    docker inspect -f '{{.State}}' web

    ExitCode 0=正常退出,137=OOM,139=段错误等,结合 Reason 判断。

  3. 3端口冲突或映射异常时列出所有容器端口

    docker ps --format '{{.Names}}\t{{.Ports}}'

    核对 0.0.0.0:8080->80/tcp 是否如预期,避免端口被其他容器占用。

  4. 4磁盘被占满时先看各对象占用

    docker system df

    区分 Images / Containers / Volumes 占用,再针对性清理。

  5. 5进入容器排查网络连通性

    docker exec -it web sh -c "cat /etc/resolv.conf; ping -c1 8.8.8.8"

    分别验证 DNS 解析与出网连通,定位是网络配置还是镜像问题。

命令示例

后台运行并映射端口的 nginx 容器

docker run -d --name web -p 8080:80 nginx:alpine

-p 8080:80 表示宿主机 8080 转发到容器 80,访问 http://localhost:8080 即可看到 nginx 欢迎页;-d 让容器后台运行,--name 便于后续用名字管理。

输出

b3f2c1a9d8e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b

挂载当前目录并进入交互 shell

docker run -it --rm -v "$(pwd)":/app -w /app node:18-alpine sh

-v 把当前目录挂载到容器 /app,-w 设为工作目录,--rm 退出时自动删除容器,-it 提供交互终端,适合本地调试 Node 应用而无需本地安装 Node。

跟踪容器日志最后 100 行

docker logs -f --tail 100 web

-f 实时跟踪后续日志,--tail 100 只从最后 100 行开始输出,排查启动崩溃或请求异常时第一命令。

清理未使用的镜像释放磁盘

docker system df

先 docker system df 看占用,再决定是否 docker image prune -a 清理所有未被容器引用的镜像;删镜像前务必确认没有需要保留的版本。

输出

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        5         1.4GB     621.5MB (43%)
Containers      8         3         5.6MB     5.6MB (100%)

常见坑与注意事项

  • docker run -p 是宿主端口:容器端口,写反会导致外部无法访问,且启动后不会报错,最难排查。
  • prune -a 会删除所有没有容器在用的镜像,包含刚构建但未运行的版本,生产机执行前先 docker images 确认。
  • exec 报 "executable file not found" 通常是镜像里没有该 shell,alpine 只带 sh,改用 docker exec -it <c> sh。
  • run 时要传的 -e 环境变量和端口映射,容器启动后再改不会生效;需先停容器、删除后重新 run。
  • bind mount 的源码目录若权限不足会报 permission denied,注意宿主目录属主与容器内用户是否一致。

提示

  • docker run 的 -p 是 主机端口:容器端口,写反了会导致外部访问不到。
  • exec 报 "executable file not found" 时换 sh:alpine 镜像通常没有 bash。
  • prune -a 会删掉所有没有容器在用的镜像,生产机执行前先确认 docker images。
  • docker system df 能快速查看磁盘占用,建议定期执行避免 /var/lib/docker 占满。
  • docker compose restart 比 down/up 更快,但不会重建网络和卷,nginx 改配置后最适用。

常见问题

docker run 和 docker start 有什么区别?

docker run 基于镜像创建并启动一个新容器(首次运行);docker start 重新启动一个已存在但已停止的容器,不会创建新实例。调试已有容器状态时用 start,部署新服务时用 run。

如何清理 Docker 占用的磁盘空间?

用 docker system prune 删除停止的容器、悬空镜像和构建缓存;加 -a 可一并删除所有未被容器引用的镜像。生产环境谨慎使用,避免误删仍有价值的镜像。

容器和镜像是什么关系?

镜像是只读的模板,包含运行应用所需的代码、依赖和配置;容器是镜像的运行实例,在镜像层之上增加一个可写层。同一个镜像可以同时启动多个相互隔离的容器。

容器启动后立刻退出(Exited (0))怎么排查?

先 docker ps -a 看退出码:Exited (0) 通常是前台进程没有常驻(命令执行完就退出),加 -it 或改 Dockerfile 用前台启动命令(如 CMD ["nginx","-g","daemon off;"]);非 0 退出码则 docker logs <id> 看报错日志,多为缺依赖、权限或配置文件路径问题。

容器里访问 localhost 连不上,是怎么回事?

在容器内部,localhost 指的是容器自己而不是宿主机,所以宿主机上的服务在容器里用 localhost 是访问不到的。要访问宿主服务用宿主机标准网关 IP(macOS/Windows 用 host.docker.internal,Linux 用 --network host 或宿主内网 IP);要让容器间互通,让它们加入同一个自定义 network 后用容器名互相访问。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年9月10日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们