【问题标题】:Unable to install SIMBA ODBC driver in debian container using docker file无法使用 docker 文件在 debian 容器中安装 SIMBA ODBC 驱动程序
【发布时间】:2021-11-10 11:46:55
【问题描述】:

我在我的 docker 文件中尝试了以下命令,但它仍然给我错误:-

需要最低版本 2.3.1 的依赖 unixODBC。无法加载共享库“libodbc.so.2”或其依赖项之一。为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量:liblibodbc.so.2.so: cannot open shared object file: No such file or directory

FROM 52423406.dkr.ecr.us-east-1.amazonaws.com/base-dev:microsoft-dotnet-2.1-sdk AS buildEnv
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install -y apt-utils
RUN apt-get install -y odbcinst1debian2 libodbc1 odbcinst unixodbc
RUN apt-get install -y libsasl2-modules-gssapi-mit
RUN apt-get install unzip
RUN wget https://databricks-bi-artifacts.s3.us-east-2.amazonaws.com/simbaspark-drivers/odbc/2.6.18/SimbaSparkODBC-2.6.18.1030-Debian-64bit.zip && unzip SimbaSparkODBC-2.6.18.1030-Debian-64bit.zip && dpkg -i simbaspark_2.6.18.1030-2_amd64.deb
WORKDIR ./sourceCode
COPY . .
RUN ls
RUN dotnet restore ./Services/Services.csproj --configfile ./nuget.config
# -o paramter value of publish command uses absolute path so that publishOutput folder is in root, using relative path would create it relative to the csproj folder.
RUN dotnet publish --no-restore -c Release -o /publishOutput ./Services.DeletionTool/Services.csproj


FROM 52423406.dkr.ecr.us-east-1.amazonaws.com/base-dev:microsoft-dotnet-2.1-runtime
WORKDIR ./app
COPY --from=buildEnv /publishOutput .
RUN ls
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["dotnet", "Services.DeletionTool.dll"]

为了解决这个问题,我尝试安装 libodbc1 ,看起来它是使用 docker 命令安装的,但是当我使用 kubernates 控制台命令验证已部署容器中的文件时,它的没有向我显示 /usr/lib/x86_64-linux-gnu/libodbc.so.2 的文件 .. 运行 docker 命令后,看起来安装的文件不会进入此路径。有什么建议请帮忙。

【问题讨论】:

    标签: linux docker debian containers unixodbc


    【解决方案1】:

    以下两个更改完全解决了这个问题:

    1. 在 COPY --from=buildEnv /publishOutput 之后放置 linux 命令,以便它将驱动程序文件复制到目标映像中。
    2. 另一个错误是由于 /etc/odbc.iniodbcinst.ini 文件所需的 databricks ODCB 连接器配置,通过使用以下 gawk 命令设置配置得到修复.

    请按照下面的 Simba Spark ODBC 驱动程序连接器文档了解有关 ini 文件配置的更多详细信息。 https://docs.tibco.com/pub/spotfire_server/10.6.1/doc/pdf/TIBCO(R)%20ODBC%20Driver%20for%20Apache%20Spark%20SQL%20Installation%20Guide.pdf?id=12

    FROM 7677668.dkr.ecr.us-east-1.amazonaws.com/base-dev:microsoft-dotnet-2.1-sdk AS buildEnv
    WORKDIR ./sourceCode
    COPY . .
    RUN ls
    RUN dotnet restore ./Services/Services.csproj --configfile ./nuget.config
    RUN dotnet publish --no-restore -c Release -o /publishOutput ./Services.DeletionTool/Services.csproj
    
    
    FROM 788898.dkr.ecr.us-east-1.amazonaws.com/base-dev:microsoft-dotnet-2.1-runtime
    WORKDIR ./app
    COPY --from=buildEnv /publishOutput .
    RUN ls
    
    RUN apt-get update && apt-get install -y odbcinst1debian2 libodbc1 odbcinst unixodbc && apt-get install -y libsasl2-modules-gssapi-mit && apt-get install unzip && apt-get install -y vim
    RUN apt-get install wget && wget https://databricks-bi-artifacts.s3.us-east-2.amazonaws.com/simbaspark-drivers/odbc/2.6.18/SimbaSparkODBC-2.6.18.1030-Debian-64bit.zip && unzip SimbaSparkODBC-2.6.18.1030-Debian-64bit.zip && dpkg -i simbaspark_2.6.18.1030-2_amd64.deb 
    RUN apt-get install -y gawk
    
    RUN gawk -i inplace '{ print } ENDFILE { print "[ODBC Drivers]" }' /etc/odbcinst.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Simba Apache Spark ODBC Connector 64-bit=Installed" }' /etc/odbcinst.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "[Simba Apache Spark ODBC Connector 64-bit]" }' /etc/odbcinst.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Description=Simba Apache Spark ODBC Connector (64-bit)" }' /etc/odbcinst.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Driver=/opt/simba/spark/lib/64/libsparkodbc_sb64.so" }' /etc/odbcinst.ini
    
    RUN gawk -i inplace '{ print } ENDFILE { print "[ODBC Data Sources]" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Simba Spark=Simba Apache Spark ODBC Connector 64-bit" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "[Simba Spark]" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Driver=/opt/simba/spark/lib/64/libsparkodbc_sb64.so" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "SparkServerType=3" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "ServiceDiscoveryMode=No Service Discovery" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Host=dssd-databricks.cloud.databricks.com" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "Port=498" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "UID=token" }'  /etc/odbc.ini
    RUN gawk -i inplace '{ print } ENDFILE { print "PWD=sddsdsdsdsdds" }'  /etc/odbc.ini
    
    
    EXPOSE 80
    EXPOSE 443
    ENTRYPOINT ["dotnet", "Services.DeletionTool.dll"]
    

    【讨论】:

    • 反复重写同一个配置文件是笨拙且低效的。 gawk 命令可以简单地组合成一个脚本。无论如何,您都不需要 Awk 将数据附加到文件中;只是printf '%s\n' "one line" "another line" >>file
    • 谢谢@tripleee,这是一个很好的建议,尽管最初的问题是由于驱动程序造成的,而您的重点更多地在于编写更好/高效的脚本,因为我是编写 gawk 的新手,我不是意识到这一点。我会尽快尝试
    • 前面的评论已经告诉你在没有gawk的情况下如何做到这一点。
    猜你喜欢
    • 2019-01-24
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多