排查容器端口冲突
部署微服务时,新启动的容器一直报 `port is already allocated`,但 `docker ps` 列表里没有同名容器。运维工程师用本工具查到被占用的端口对应一个已退出的容器,用 `docker container ls -a` 定位容器 ID,再用 `docker rm` 清理。十分钟内恢复部署,避免了逐个排查宿主机进程的繁琐操作。
敲下 `docker run` 却忘了 `-v` 挂载路径的写法,或者 `docker network ls` 之后找不到刚建的桥接网络——这种中断查文档的瞬间,一次就能打断容器编排的节奏。这个速查表把镜像、容器、网络、卷四类命令按操作场景分组陈列,每条命令附带参数说明与典型示例,省去翻手册的时间。所有内容以静态页面呈现,不向任何服务器发送请求,离线环境同样可查。
部署微服务时,新启动的容器一直报 `port is already allocated`,但 `docker ps` 列表里没有同名容器。运维工程师用本工具查到被占用的端口对应一个已退出的容器,用 `docker container ls -a` 定位容器 ID,再用 `docker rm` 清理。十分钟内恢复部署,避免了逐个排查宿主机进程的繁琐操作。
CI 服务器磁盘使用率飙到 95%,构建任务全部卡住。开发人员用本工具查到 `docker system df` 显示悬空镜像和停止的容器占了 12GB。对照命令大全执行 `docker image prune -a` 和 `docker container prune`,释放空间后构建流水线恢复运行。整个过程不到 3 分钟,无需重启服务器。
测试团队需要模拟生产环境的三个独立子网,但 `docker network create` 的参数记不全。测试工程师用本工具查到 `--subnet` 和 `--gateway` 的写法,创建了 `frontend`、`backend`、`db` 三个自定义桥接网络。随后用 `docker network connect` 将容器挂载到对应网络,半小时内复现了生产环境的网络拓扑。
某开发者在清理测试环境时误执行 `docker rm -f` 删除了一个运行中的数据库容器,但容器内的数据卷未删除。用本工具查到数据卷的持久化机制,通过 `docker volume ls` 找到残留卷,再用 `docker run -v` 挂载到新容器启动。数据库表结构完整恢复,避免了从备份重新导入的 40 分钟等待。
新部署的 API 网关容器无法访问后端的 Redis 服务,但两个容器都在同一个 compose 项目中。后端开发用本工具查到 `docker exec -it <容器名> ping <目标容器>` 的调试方法,进入网关容器后 `ping redis` 发现 DNS 解析失败。对照命令大全检查 `docker-compose.yml` 中的 `links` 配置,修正后网络恢复。
| 输入 | 输出 | 说明 |
|---|---|---|
| docker ps | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES (空列表) | 常规:最常用的列出运行容器命令,首次使用时输出空列表,验证工具能正确解析无容器状态 |
| docker images | REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f8a4ffc3a2b1 2 weeks ago 187MB ubuntu 22.04 a1b2c3d4e5f6 1 month ago 77.8MB | 常规:列出本地已有镜像,展示工具能解析多行多列输出,包含仓库名、标签、ID、创建时间和大小 |
| docker run -d --name web nginx | a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6 | 边界:run 命令返回容器长 ID(64 位十六进制),验证工具能准确截取并展示完整哈希值 |
| docker stop $(docker ps -q) | a1b2c3d4e5f6 g7h8i9j0k1l2 m3n4o5p6q7r8 | 边界:停止所有运行容器,输出为多个容器 ID 分行显示,验证工具能处理 shell 命令组合和换行输出 |
| docker rm -f $(docker ps -aq) | a1b2c3d4e5f6 g7h8i9j0k1l2 m3n4o5p6q7r8 | 边界:强制删除所有容器(包括停止的),输出与 stop 类似但操作更危险,验证工具能区分不同命令的语义差异 |
| docker exec -it web sh | (无输出,进入交互式 shell) | 易错:交互式命令在非终端环境下可能无输出或挂起,验证工具能正确处理 -it 参数并提示用户需终端环境 |
| docker build -t myapp . | Sending build context to Docker daemon 2.048kB Step 1/3 : FROM node:18-alpine ---> a1b2c3d4e5f6 Step 2/3 : WORKDIR /app ---> Running in x1y2z3a4b5c6 Removing intermediate container x1y2z3a4b5c6 ---> d1e2f3g4h5i6 Step 3/3 : COPY . . ---> Running in j1k2l3m4n5o6 Removing intermediate container j1k2l3m4n5o6 ---> e1f2g3h4i5j6 Successfully built e1f2g3h4i5j6 Successfully tagged myapp:latest | 易错:build 命令输出包含多步骤和中间容器 ID,验证工具能逐行解析构建日志,不遗漏 Successfully 标记 |
| docker network ls | NETWORK ID NAME DRIVER SCOPE b1c2d3e4f5g6 bridge bridge local h1i2j3k4l5m6 host host local n1o2p3q4r5s6 none null local | 常规:列出所有网络,展示工具能处理三列(ID、名称、驱动、作用域)的标准表格输出 |
1.docker run 后直接跟镜像名,忽略 tag 导致拉取非预期版本
docker run nginxdocker run nginx:1.25省略 tag 默认拉取 latest,但 latest 可能指向最新版或滚动更新版,生产环境必须指定明确版本号以保证可复现性。
2.docker exec -it 忘记 -it 导致无法交互
docker exec 容器ID bashdocker exec -it 容器ID bash-i 保持 STDIN 打开,-t 分配伪终端,缺一不可。没有 -it 时 bash 立即退出,无法进入交互式 shell。
3.docker rm 前未停止容器,强制删除导致数据丢失
docker rm 容器IDdocker stop 容器ID && docker rm 容器ID运行中容器无法直接删除(除非加 -f),但 -f 会发送 SIGKILL 而非 SIGTERM,跳过优雅关闭流程,可能丢失未写入磁盘的数据。
4.docker build 时用 . 作为上下文,把大文件全打包进去
docker build -t myapp .docker build -t myapp -f Dockerfile .构建上下文默认包含当前目录所有文件,若目录下有 node_modules、.git 等大目录,构建会极慢。必须配合 .dockerignore 排除无关文件。
5.docker run -p 映射端口时写反宿主端口和容器端口
docker run -p 80:8080 nginxdocker run -p 8080:80 nginx-p 格式为 宿主机端口:容器端口,写反后宿主监听 80、容器内 nginx 监听 8080,实际访问宿主 80 会连接失败。
6.docker logs 不加 -f 只看一次日志,错过后续输出
docker logs 容器IDdocker logs -f 容器ID不加 -f 只打印当前已有日志后退出,适合排查历史错误;加 -f 持续跟踪新日志,适合调试启动阶段或实时监控。
7.docker commit 替代 Dockerfile 构建镜像
docker commit 容器ID myimage:latest编写 Dockerfile 并用 docker build 构建docker commit 创建的是黑盒镜像,无法追溯变更、不可重复构建。官方最佳实践始终使用 Dockerfile 声明式构建。
8.docker volume prune 不加 --filter 误删所有未使用卷
docker volume prunedocker volume prune --filter label!=keepprune 默认删除所有未被容器引用的卷,若临时停止容器后忘记标签保护,数据卷会被清除。生产环境务必用标签或手动管理。
容器内存限制 = memory_limit_bytes - (kernel_overhead + cgroup_overhead)
memory_limit_bytesdocker run --memory 设定的字节数kernel_overhead内核保留内存,约 64 MBcgroup_overheadcgroup 管理开销,约 5% 总限制设 --memory=512m(即 536870912 字节),kernel_overhead=64×1024×1024=67108864,cgroup_overhead=536870912×0.05=26843546,则容器可用内存=536870912-67108864-26843546=442948502 字节≈422.5 MB。
完全等价,docker ps 是旧式命令,docker container ls 是新的子命令风格。本工具手册两者都收录,实际用哪个取决于习惯。在 Docker 1.13+ 中,官方推荐子命令结构(docker container / image / network / volume),但老用户仍常用 docker ps。如果脚本里用 docker ps 更短,但 docker container ls 在自动补全和帮助提示上更友好,没有功能差异。
说明有容器正在用这个镜像,先停掉容器再删。步骤:docker ps -a 找到对应容器的 CONTAINER ID,然后 docker rm -f <ID> 强制删除容器,最后 docker rmi <IMAGE_ID> 删镜像。如果容器已停止但还在,直接 docker rm 再 rmi 即可。本工具也收录了 docker system prune -a 这条清理命令,可以一键清除所有未使用的镜像、容器、网络和卷。
用 docker ps 查看正在运行的容器列表,如果容器不在列表里,说明启动后立即退出了。此时用 docker logs <CONTAINER_ID> 看日志输出,常见原因是前台进程未保持运行(比如启动 nginx 但没加 daemon off)。用 docker inspect <ID> 可以看退出码和状态详情。本工具的常用命令部分也包含了 docker logs -f 实时跟踪日志的用法。
按 Ctrl + D 或输入 exit 退出。这只会退出 exec 创建的 shell 进程,不会影响容器主进程。如果容器启动时用的是交互模式(docker run -it),直接 exit 会让容器也停止,因为主进程(bash)结束了。本工具在 exec 命令说明里特别标注了:-it 参数用于交互式执行,退出不影响容器,除非 exec 的是主进程。
docker-compose 是 docker run 的编排封装,用 YAML 文件定义多个容器、网络、卷的配置,一次启动全部。当项目需要多个服务(如 web + db + redis)时,用 docker run 要写很多条命令,而 docker-compose up 一条搞定。本工具也收录了 docker-compose 的常用命令(up、down、logs、ps),适合多容器场景速查。
Docker Hub 显示的是镜像的完整层数,而 pull 时如果本地已有某些层(比如基础镜像的层),则只会下载缺失的层,所以显示的下载层数可能比 Hub 上少。另外 manifest list(多架构镜像)在 pull 时会根据你的 CPU 架构选择对应的镜像,层数也可能不同。用 docker history <IMAGE> 可以看到本地镜像的实际层结构。
性能上 bind mount 略好(直接映射宿主机文件系统),但 volume 由 Docker 管理,跨平台兼容性更好,支持卷驱动(如 NFS、云存储)。生产环境优先用 volume,因为备份、迁移方便;开发调试用 bind mount 可以实时修改代码。本工具在卷管理部分列出了 docker volume create / inspect / prune 等命令,并给出了两者的适用场景说明。
bridge(默认)是隔离的虚拟网络,容器间通过 IP 通信,适合单机多容器场景。host 模式容器直接使用宿主机网络栈,性能最好但无隔离,适合需要高吞吐的网络服务(如 nginx)。none 模式没有网络,适合安全敏感的离线任务。本工具的网络命令部分详细列出了 docker network create / connect / disconnect 的用法,并给出了每种模式的典型场景。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。