【问题标题】:RHEL 8 Container MSSQL ODBC Driver e2fsprogsRHEL 8 容器 MSSQL ODBC 驱动程序 e2fsprogs
【发布时间】:2020-11-25 11:33:35
【问题描述】:

我正在尝试使用 RHEL 8 UBI 构建自定义 docker 容器。作为其中的一部分,我想安装 MSSQL 17 ODBC 驱动程序。 我已按照此处 Microsoft 文档中概述的步骤进行操作: https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15#redhat17

并将 Microsoft 存储库添加到我的 yum.repos.d 目录但是当我尝试构建容器时出现以下错误:nothing provides e2fsprogs needed by msodbcsql17-17.6.1.1-1.x86_64

当我对此进行深入研究时,它看起来好像对于 RHEL-7 微软建议手动安装 e2fsprogs,您可以在此处看到:https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15#offline-installation

不幸的是,这在 RHEL-8 中是不可能的,因为 e2fsprogs-static 已被删除:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/considerations_in_adopting_rhel_8/index#removed-packages_changes-to-packages

构建的完整输出是:

$  docker build -f ./test.dockerfile -t daark:1 .
Sending build context to Docker daemon  25.77MB
Step 1/7 : FROM registry.redhat.io/ubi8/ubi
 ---> a1f8c9699786
Step 2/7 : RUN curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
 ---> Using cache
 ---> 90b3e1514239
Step 3/7 : RUN yum search odbc
 ---> Using cache
 ---> b26f78d0da28
Step 4/7 : RUN yum search msodbcsql17
 ---> Using cache
 ---> c6f7751b97dc
Step 5/7 : ENV ACCEPT_EULA=Y
 ---> Using cache
 ---> 2b0003944673
Step 6/7 : RUN yum install -y unixODBC unixODBC-devel
 ---> Using cache
 ---> 1d0b8c594905
Step 7/7 : RUN yum install -y msodbcsql17
 ---> Running in 67c30e75fb42
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:08:11 ago on Wed Aug  5 09:36:32 2020.
Error:
 Problem: cannot install the best candidate for the job
  - nothing provides e2fsprogs needed by msodbcsql17-17.6.1.1-1.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
The command '/bin/sh -c yum install -y msodbcsql17' returned a non-zero code: 1

这个错误很容易重现,这里是我用来调试的测试 dockerfile


FROM registry.redhat.io/ubi8/ubi
RUN curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
RUN yum search odbc
RUN yum search msodbcsql17
ENV ACCEPT_EULA=Y
RUN yum install -y unixODBC unixODBC-devel 
RUN yum install -y msodbcsql17

有人设法在基于 RHEL 8 UBI 的容器上安装了这个 ODBC 驱动程序吗?

【问题讨论】:

    标签: sql-server docker odbc pyodbc rhel8


    【解决方案1】:

    我找到了一个解决方法,希望能帮助下一个人解决这个问题。 我没有运行yum install -y msodbcsql17,而是使用 yum 来下载 RPM yum download -y msodbcsql17 然后用rpm -Uvh --nodeps msodbcsql17*rpm安装。

    你可以使用这个 docker 文件:

    FROM registry.redhat.io/ubi8/ubi
    RUN curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
    RUN yum search odbc
    RUN yum search msodbcsql17
    ENV ACCEPT_EULA=Y
    RUN yum install -y unixODBC unixODBC-devel 
    RUN yum download -y msodbcsql17
    RUN rpm -Uvh --nodeps msodbcsql17*rpm
    

    【讨论】:

    • 谢谢你,我会在我们的环境中尝试这个,但是可以跳过依赖项似乎很奇怪!
    • @hirolau - 这是一个奇怪的,据我所知,这是因为 redhat 不幸停止支持这种依赖,而不是他们只是跳过它,他们认为它可以从 repo 中获得:(
    • @daark 感谢您发布此解决方案。你的解决方案让我克服了我面临的问题。我结束了修改你的解决方案(以防它帮助其他人):``` FROM registry.access.redhat.com/ubi8/python-38 as development USER root RUN yum update --assumeyes && \ yum install --assumeyes \ unixODBC-devel \ && yum clean all 运行 curl packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo 运行 yum 下载 -y msodbcsql17 RUN ACCEPT_EULA=y rpm -Uvh --nodeps msodbcsql17*rpm `` `
    【解决方案2】:

    @daark 感谢您发布您的解决方案。你的解决方案让我克服了我面临的问题。我结束了将您的解决方案修改为以下内容(以防它帮助其他人):

    FROM registry.access.redhat.com/ubi8/python-38
    
    USER root
    RUN yum update --assumeyes && \
      yum install --assumeyes \
        unixODBC-devel \
      && yum clean all
    
    RUN curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
    RUN yum download -y msodbcsql17
    RUN ACCEPT_EULA=y rpm -Uvh --nodeps msodbcsql17*rpm
    

    我尝试将此作为注释添加到@daark 的解决方案中,但是很难正确显示代码。

    祝其他遇到此问题的人好运?

    【讨论】:

    • 感谢赵的更新,这似乎越来越成为一个问题,希望能得到尽可能多的答案!
    • 在没有依赖的情况下安装驱动不是很危险吗?它可能在运行时失败。
    • @tephe 抱歉,我不确定这是否危险。而且我不确定您指的是什么依赖项。
    • 我指的是 e2fsprogs 库,它是 msodbcsql17 的依赖项。今天遇到了同样的问题。在您的回答中,命令行安装 msodbcsql17 而不检查依赖项。 (见 --nodeps 标志)
    • 哦,我明白了。我会试试看是否需要-nodeps
    【解决方案3】:

    最新的 msodbcsql17 版本修复了这个问题。文档步骤再次顺利进行。见docs issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 2012-12-05
      • 2010-11-03
      • 1970-01-01
      • 2021-08-25
      • 2015-03-24
      • 2019-01-24
      • 2017-01-17
      相关资源
      最近更新 更多