跳到主要内容

Docker 命令速查

本篇用于学完前九章后的日常查阅,不替代概念和实战教程。尖括号表示必须替换的占位符,例如 <container> 应替换为真实容器名;输入命令时不要保留尖括号。

1. 如何获取帮助

# 查看 Docker 顶层命令和管理对象
docker --help

# 查看 run 的全部参数和示例说明
docker run --help

# 查看镜像子命令
docker image --help

# 查看 Compose 可用命令
docker compose --help

# 显示客户端和服务端版本
docker version

命令结构通常是 docker 对象 动作,例如 docker container lsdocker image rmdocker psdocker pull 等是常用短写。

2. 容器创建与运行

# 后台启动 Web 服务,并映射宿主机 8080 到容器 80
docker run --detach \
--name web \
--publish 127.0.0.1:8080:80 \
nginx:1.27-alpine

# 启动交互式临时 shell,退出后自动删除容器
docker run --rm --interactive --tty \
alpine:3.20 sh

# 从文件注入环境变量;敏感文件不要提交 Git
docker run --rm \
--env-file ./.env \
<image>:<tag>

# 设置 CPU、内存和进程数量限制
docker run --detach \
--cpus 1.0 \
--memory 512m \
--pids-limit 200 \
<image>:<tag>

# 只创建容器但不启动
docker create --name <container> <image>:<tag>

3. 容器生命周期

# 列出运行中的容器
docker ps

# 列出所有容器,包括已退出的容器
docker ps --all

# 启动已存在的停止容器,不创建新容器
docker start <container>

# 优雅停止,30 秒后仍未退出才强制终止
docker stop --time 30 <container>

# 停止后重新启动容器
docker restart --time 30 <container>

# 删除已停止的容器
docker rm <container>

# 强制停止并删除明确指定的容器
docker rm --force <container>

4. 日志、状态与调试

# 查看最近 100 行日志并持续跟踪;Ctrl+C 不会停止容器
docker logs --follow --tail 100 <container>

# 查看容器完整配置和运行状态
docker inspect <container>

# 提取状态、退出码和 OOM 标记
docker inspect <container> \
--format 'status={{.State.Status}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}}'

# 在运行中的容器里启动一个额外 shell
docker exec --interactive --tty <container> sh

# 在容器中执行单条命令
docker exec <container> <command>

# 查看容器主进程和子进程
docker top <container>

# 查看一次 CPU、内存、网络和磁盘 I/O
docker stats --no-stream <container>

# 查看容器可写层相对镜像的变化
docker diff <container>

# 从容器复制文件到当前宿主机目录
docker cp <container>:/path/to/file ./

5. 镜像与构建

# 拉取明确版本的镜像
docker pull <image>:<tag>

# 列出本地镜像
docker image ls

# 查看镜像配置、架构、层和摘要
docker image inspect <image>:<tag>

# 根据当前目录 Dockerfile 构建并打标签
docker build --tag <image>:<tag> .

# 重新拉取基础镜像后构建
docker build --pull --tag <image>:<tag> .

# 查看构建历史和各层大小
docker history <image>:<tag>

# 为同一镜像增加远程仓库标签
docker tag <image>:<tag> \
<registry>/<namespace>/<image>:<tag>

# 推送已正确命名并完成登录的镜像
docker push <registry>/<namespace>/<image>:<tag>

# 删除明确指定且未被容器引用的镜像
docker image rm <image>:<tag>

6. 网络

# 列出 Docker 网络
docker network ls

# 创建带名称解析的自定义 bridge 网络
docker network create <network>

# 查看子网、网关和已连接容器
docker network inspect <network>

# 把运行中的容器接入另一个网络
docker network connect <network> <container>

# 从网络断开容器
docker network disconnect <network> <container>

# 查看容器发布到宿主机的端口
docker port <container>

# 删除没有容器连接的网络
docker network rm <network>

端口映射格式是 [宿主IP:]宿主端口:容器端口[/协议]

# 仅本机访问的 TCP 端口映射
docker run --publish 127.0.0.1:8080:80 <image>:<tag>

# 对宿主机接口发布 UDP 端口
docker run --publish 5353:5353/udp <image>:<tag>

7. 卷与挂载

# 创建和列出命名卷
docker volume create <volume>
docker volume ls

# 查看卷驱动、标签和挂载点
docker volume inspect <volume>

# 把命名卷挂载到容器数据目录
docker run --rm \
--mount type=volume,src=<volume>,dst=/data \
<image>:<tag>

# 把当前宿主机目录只读挂载到容器
docker run --rm \
--mount type=bind,src="$PWD",dst=/app,readonly \
<image>:<tag>

# 删除明确指定且未被容器引用的卷;数据永久删除
docker volume rm <volume>

8. Docker Compose

以下命令在 compose.yaml 所在目录执行:

# 解析并输出最终配置,用于检查 YAML 和变量替换
docker compose config

# 仅校验配置,成功时不输出内容
docker compose config --quiet

# 后台创建和启动服务,并等待运行或健康
docker compose up --detach --wait

# 构建本地镜像后启动服务
docker compose up --detach --build

# 查看项目全部服务状态
docker compose ps --all

# 跟踪指定服务最近 100 行日志
docker compose logs --follow --tail 100 <service>

# 在正在运行的服务容器中执行 shell
docker compose exec <service> sh

# 创建一次性服务容器执行命令,结束后自动删除
docker compose run --rm <service> <command>

# 停止服务但保留容器、网络和卷
docker compose stop

# 启动之前停止的服务容器
docker compose start

# 删除服务容器和默认网络,保留命名卷
docker compose down

# 删除容器、网络和命名卷;数据永久删除
docker compose down --volumes

9. 系统与磁盘

# 查看 Engine、存储驱动、插件、CPU、内存和安全选项
docker info

# 查看镜像、容器、卷和构建缓存空间占用
docker system df

# 显示详细对象和可回收空间
docker system df --verbose

# 查看最近 30 分钟创建、启动、停止、OOM 等事件
docker events --since 30m

# 查看和切换 Docker 上下文,例如本机或远程 Engine
docker context ls
docker context use <context>

10. 清理命令

先用列表、inspectsystem df 确认归属,再执行清理。默认不要附加 --force,让 Docker 显示确认提示。

# 删除所有停止容器;可能丢失日志和可写层现场
docker container prune

# 删除 dangling 镜像,不包括所有未使用标签镜像
docker image prune

# 删除所有未被任何容器引用的镜像
docker image prune --all

# 删除未使用的构建缓存
docker builder prune

# 删除没有容器连接的网络
docker network prune

# 删除未被容器引用的卷;卷内数据永久删除
docker volume prune

# 查看综合清理帮助,不要盲目执行示例
docker system prune --help
最高风险命令

docker system prune -a --volumes 会综合删除停止容器、未使用网络、未被容器引用的镜像、构建缓存和卷。未被引用的卷仍可能保存已下线业务的重要数据。没有逐项确认和可恢复备份时,不要执行。

11. 常用过滤和格式化

# 只查看名称包含 web 的容器
docker ps --all --filter name=web

# 只查看基于指定镜像创建的容器
docker ps --all --filter ancestor=nginx:1.27-alpine

# 自定义表格列,便于快速对比名称、状态和端口
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

# 只输出容器 ID,适合受控脚本进一步处理
docker ps --quiet

# 查看带指定标签的镜像
docker image ls --filter label=org.opencontainers.image.source

把命令用于脚本前,应同时处理空结果、非零退出码、并发变化和不同 Docker 版本,不要直接把 docker ps -q 结果交给危险的批量删除命令。

12. 对象关系速记

想做的事推荐命令是否创建新对象
从仓库下载镜像docker pull新镜像或新内容
从 Dockerfile 构建镜像docker build新镜像
根据镜像运行应用docker run新容器
重新启动停止容器docker start
在运行容器中执行命令docker exec新进程,不是新容器
停止容器docker stop
删除容器docker rm删除容器,可写层消失
删除镜像docker image rm删除标签或镜像
停止 Compose 项目docker compose stop保留全部项目对象
删除 Compose 运行对象docker compose down删除容器和默认网络,保留卷

如果某条命令的影响范围不明确,先执行对应的 --help,再用 lspsinspectconfig 确认目标。