DockerfileBase 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # 基础镜像构建Dockerfile
  2. # 包含系统依赖和ODBC组件
  3. # 优化版本:减少镜像层数,提高构建效率
  4. # 基础系统依赖镜像
  5. FROM python:3.13-slim
  6. # 创建工作目录
  7. WORKDIR /app
  8. # 设置环境变量
  9. ENV FREETDS_VERSION=7.3 \
  10. ODBCSYSINI=/etc \
  11. ODBCINI=/etc/odbc.ini \
  12. DEBIAN_FRONTEND=noninteractive \
  13. TZ=Asia/Shanghai
  14. # 配置阿里云APT源并安装基础依赖
  15. RUN set -eux; \
  16. # 配置阿里云APT源 - 提高下载速度
  17. echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \
  18. echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
  19. echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \
  20. # 修改动态生成的APT源配置文件
  21. find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' {} \; && \
  22. find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' {} \; && \
  23. # 更新源并安装基础系统依赖 - 合并安装所有依赖减少层数
  24. apt-get update && \
  25. apt-get install -y --no-install-recommends \
  26. # 系统基础依赖
  27. apt-utils \
  28. libc6 \
  29. curl \
  30. gnupg2 \
  31. ca-certificates \
  32. # ODBC基础依赖
  33. libltdl7 \
  34. libodbc1 \
  35. libodbcinst2 \
  36. odbcinst \
  37. odbcinst1debian2 \
  38. unixodbc \
  39. unixodbc-common \
  40. unixodbc-dev \
  41. # FreeTDS相关依赖
  42. freetds-bin \
  43. freetds-dev \
  44. tdsodbc && \
  45. # 配置FreeTDS - 使用单一配置文件
  46. { \
  47. echo "[global]"; \
  48. echo " tds version = 7.3"; \
  49. echo " client charset = UTF-8"; \
  50. echo " timeout = 60"; \
  51. echo " connect timeout = 15"; \
  52. } > /etc/freetds/freetds.conf && \
  53. # 配置ODBC驱动 - 使用单一配置文件
  54. { \
  55. echo "[FreeTDS]"; \
  56. echo "Description = TDS driver (Sybase/MS SQL)"; \
  57. echo "Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so"; \
  58. echo "CPTimeout ="; \
  59. echo "CPReuse ="; \
  60. echo "UsageCount = 1"; \
  61. } > /etc/odbcinst.ini && \
  62. # 验证驱动安装 - 确保配置正确
  63. if [ ! -f /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so ]; then \
  64. echo "ERROR: FreeTDS ODBC driver not found"; \
  65. exit 1; \
  66. fi && \
  67. # 清理临时文件 - 减小镜像大小
  68. apt-get clean && \
  69. apt-get autoremove -y && \
  70. rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  71. # 健康检查 - 验证ODBC配置是否正确
  72. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  73. CMD [ "odbcinst", "-q", "-d", "-n", "FreeTDS" ]