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 只适合本地调试。