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
相关产品推荐
相关产品推荐

