1. 镜像体积失控

基础镜像建议选 python:3.9-slim 而非完整版,能省一半以上体积。

2. 时区问题

容器默认 UTC,日志时间对不上排查很痛苦:

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

3. 依赖缓存

把 requirements.txt 单独 COPY 并先安装,再 COPY 源码,可以充分利用 Docker 层缓存。

4. 非 root 运行

RUN useradd -m appuser
USER appuser

5. 健康检查

HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost:8000/health || exit 1

6. 日志不落盘

让应用直接输出 stdout,由 Docker 日志驱动统一管理。

7. 端口写死

用环境变量注入端口,容器编排时才不会互相打架。

8. 数据库文件丢失

数据目录必须挂载 Volume,否则容器重建数据全没。

9. 忽略 .dockerignore

__pycache__、.venv、*.db 都会被塞进构建上下文,又慢又大。

10. 不写标签

镜像一定要打版本标签,latest 只适合本地调试。