跳到主要内容

排错与工程习惯

前面几篇讲「怎么建、怎么联调」;本篇是日常口令与边界:构建挂了看哪、连不上库查什么、以及你不能做主时别乱动。

常用命令​

docker compose ps # 看服务是否在跑
docker compose logs -f api # 跟日志
docker compose exec api sh # 进容器(镜像无 sh 时换 bash)
docker images # 本机镜像
docker system df # 占了多少磁盘
docker system prune # 清理无用数据(慎用,先看将删什么)

单容器场景把 compose 换成 docker ps / docker logs / docker exec 即可。

排查路径​

现象先查
docker build 失败Dockerfile 哪一步报错;依赖清单/锁文件是否进上下文;基础镜像能否拉取
镜像能建、容器秒退logs 看进程退出原因;CMD/ENTRYPOINT 是否写错
浏览器连不上端口-p 是否映射;进程是否监听 0.0.0.0(而非仅容器内想象中的端口)
应用连不上数据库Compose 服务名是否写对;端口是否容器端口;是否在等库就绪(见 Compose 篇)
「我本地可以」镜像不行基础镜像主版本、锁文件、.dockerignore 是否漏打进必需文件

你不能做主时​

  1. 不改动正在用的基础镜像族,除非有迁移任务
  2. 本地调试优先:docker compose / README 里的 build 参数
  3. 只想加快安装时,可在 既有 Dockerfile 结构内 换更快安装器,并确认锁文件与缓存仍正确
  4. 业务 hotfix 里夹带「重写 Dockerfile + 换包管理器」风险极高

工程一致性​

镜像标签 + 锁文件 + CI 构建命令 → 三者一致

比追求最新语法更重要:同一 commit 在 CI 打出的标签,应能在预发/生产复现。

要点​

  1. ps → logs → exec 是默认三连
  2. 构建看层,运行看日志与网络名
  3. 先跟仓库现有文件,再谈「最优 Dockerfile」
  4. 标签、锁文件、CI 一致,胜过局部优化

面试速记​

  1. 容器起来又退出怎么查? docker logs / compose logs 看主进程报错;检查 CMD 与依赖是否就绪。
  2. 如何进入运行中的容器? docker exec -it <id> sh(或 compose exec)。
  3. 构建很慢从哪优化? 依赖与源码分层、.dockerignore、合理利用缓存;必要时多阶段。
  4. 为什么强调锁文件与 CI 一致? 否则「本地/CI/生产」安装出不同依赖树,难复现。
  5. 磁盘被 Docker 吃满? docker system df 查看;再按团队规范 prune(注意别误删尚需缓存)。