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

Docker安装msodbcsql17返回非零代码100求助

解决Docker容器中msodbcsql17安装的文件覆盖冲突问题

问题说明

在Azure上运行的Docker容器中,此前按微软官方文档安装msodbcsql17正常,现在执行RUN sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17时返回非零代码100,构建日志显示dpkg处理deb包时出现文件覆盖冲突:libodbc1_2.3.11_amd64.deb试图覆盖libodbc2:amd64 2.3.9-5的文件/usr/lib/x86_64-linux-gnu/libodbc.so.2.0.0。

原Dockerfile代码

RUN if! [[ "16.04 18.04 20.04 21.04 21.10" == *"$(lsb_release -rs)"* ]]; \
then \
    echo "Ubuntu $(lsb_release -rs) is not currently supported."; \
    exit; \
fi

RUN sudo su
RUN apt-get update && apt-get install -y gnupg2

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

RUN curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list

RUN exit
RUN sudo apt-get update
RUN sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17

报错日志片段

2023-02-14T11:24:14.9398390Z Preparing to unpack .../libodbc1_2.3.11_amd64.deb ...
2023-02-14T11:24:14.9410458Z Unpacking libodbc1:amd64 (2.3.11) ...
2023-02-14T11:24:14.9446555Z dpkg: error processing archive /var/cache/apt/archives/libodbc1_2.3.11_amd64.deb (--unpack):
2023-02-14T11:24:14.9448446Z  trying to overwrite '/usr/lib/x86_64-linux-gnu/libodbc.so.2.0.0', which is also in package libodbc2:amd64 2.3.9-5
...

解决方案

方案一:强制覆盖冲突文件

修改安装命令,添加--force-overwrite参数,允许dpkg覆盖冲突文件:

RUN sudo apt-get update
RUN sudo ACCEPT_EULA=Y apt-get install -y --force-overwrite msodbcsql17

方案二:先卸载冲突包

先移除系统源中的libodbc2包,再安装msodbcsql17:

RUN sudo apt-get update
RUN sudo apt-get remove -y libodbc2
RUN sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17

优化Dockerfile(可选)

原Dockerfile中RUN sudo su和RUN exit无效,因为每个RUN指令是独立容器层,不会保留用户状态。可合并多步命令减少镜像层数:

RUN if! [[ "16.04 18.04 20.04 21.04 21.10" == *"$(lsb_release -rs)"* ]]; \
then \
    echo "Ubuntu $(lsb_release -rs) is not currently supported."; \
    exit; \
fi

RUN apt-get update && apt-get install -y gnupg2 \
    && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list

RUN apt-get update \
    && ACCEPT_EULA=Y apt-get install -y --force-overwrite msodbcsql17

内容的提问来源于stack exchange,提问作者frank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:55:42