You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

amd64架构下构建含Microsoft SQL Server ODBC驱动的Docker镜像失败求助

解决amd64架构下Docker构建msodbcsql18失败问题

问题背景

Dockerfile在ARM架构(Mac)上构建正常,但在amd64架构下执行apt-get install msodbcsql18时返回exit code 100,无法完成构建。

核心原因

exit code 100是apt-get的通用错误码,通常对应源配置错误、签名验证失败或包无法找到。amd64架构下的失败大概率是微软SQL Server ODBC驱动源的配置不兼容,或者冗余的Shell配置步骤干扰。

解决方案

方案1:修复Dockerfile配置(推荐)

精简无效步骤,调整源和密钥配置,适配amd64架构:

# Use the official Python 3.9 slim image as the base
FROM python:3.9-slim

# Install necessary packages and setup Microsoft SQL Server ODBC driver repository for Debian 11 (Bullseye)
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    iputils-ping \
    curl \
    gnupg2 \
    apt-transport-https \
    unixodbc \
    unixodbc-dev \
    libgssapi-krb5-2 && \
    # 重新导入微软密钥,符合Debian 11的签名验证规范
    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg && \
    # 指定amd64架构源,避免多架构包混淆
    echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/debian/11/prod bullseye main" | tee /etc/apt/sources.list.d/mssql-release.list

# Install the ODBC Driver 18 without mssql-tools
RUN apt-get update && \
    ACCEPT_EULA=Y apt-get install -y msodbcsql18

关键调整点:

  • 移除了bashrc配置步骤:Docker默认使用sh,该配置对后续命令无持久作用,完全冗余。
  • 调整密钥存储路径:将密钥存入/etc/apt/trusted.gpg.d/,而非原/usr/share/keyrings/,解决Debian 11下的签名验证问题。
  • 指定源架构:明确arch=amd64,确保拉取适配目标架构的驱动包。

方案2:排查详细错误(用于定位深层问题)

如果方案1仍失败,添加详细日志输出,查看具体错误原因:

# 修改安装步骤,添加详细日志
RUN apt-get update -v && \
    ACCEPT_EULA=Y apt-get install -y -v msodbcsql18

构建时重点关注:

  • apt-get update阶段是否有源无法访问、签名验证失败的提示
  • apt-get install阶段是否提示msodbcsql18包不存在

方案3:使用微软官方驱动镜像(备选)

若手动配置源始终有问题,直接基于微软官方ODBC驱动镜像构建:

# 先拉取微软ODBC 18官方镜像
FROM mcr.microsoft.com/mssql/msodbcsql18:latest AS odbc-base
# 基于Python 3.9 slim构建最终镜像
FROM python:3.9-slim

# 从官方镜像复制驱动文件
COPY --from=odbc-base /opt/microsoft/msodbcsql18 /opt/microsoft/msodbcsql18
COPY --from=odbc-base /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu

# 安装必要依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    unixodbc \
    libgssapi-krb5-2 && \
    rm -rf /var/lib/apt/lists/*

内容的提问来源于stack exchange,提问作者Sigurður Óli Gestsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:08:12