🟢 入门题
E1. .env 和 .env.example 有什么区别?
参考答案
.env.example 是可提交模板,说明需要哪些变量;.env 是本地真实配置,可能包含密码和 token,不应提交。
E2. 为什么要写 healthcheck?
参考答案
容器启动不代表服务可用。healthcheck 让依赖服务有明确健康状态,也方便排障和编排。
E3. ports 和 expose 的区别?
参考答案
ports 把容器端口映射到宿主机;expose 只在 Compose 网络内声明端口,不暴露给宿主机。
🟡 进阶题
A1. 设计一个 API + Redis + Postgres 的 compose
要求包含 volume、环境变量、健康检查、服务依赖。
A2. 数据库 volume 为什么不能随便删?
参考答案
volume 存业务数据。docker compose down -v 会删除数据卷,适合重置开发环境,不适合生产或有价值数据。
A3. 为什么生产环境不能直接复用开发 compose?
参考答案
生产需要密钥管理、备份、监控、资源限制、网络隔离、镜像版本固定和滚动发布;开发 compose 主要保证本地可复现。
🔴 深度题
D1. 别人 clone 后跑不起来,你按什么顺序排障?
看 Docker 版本 → .env 是否齐全 → 端口占用 → 镜像拉取 → healthcheck → logs → 容器间网络名。