我有一个 dotnet 核心应用程序,它使用 ODBC System.Data.Odbc
连接到 Vertica。当我在 Visual Studio 上的 Windows 机器上运行它时,它运行良好。但是我想将它容器化并在 Linux 服务器上运行它,我收到以下错误:
例外。 System.PlatformNotSupportedException:此平台不支持 System.Data.ODBC。 在 System.Data.Odbc.OdbcConnection..ctor(String connectionString)
下面是我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/runtime:3.0.1-buster-slim
# ODBC driver manager
RUN apt-get update \
&& apt-get install -y --no-install-recommends unixodbc-bin \
&& rm -rf /var/lib/apt/lists/*
# Vertica ODBC driver and configurations
RUN curl https://www.vertica.com/client_drivers/9.3.x/9.3.0-0/vertica-client-9.3.0-0.x86_64.tar.gz |
tar xz opt/vertica/lib64/libverticaodbc.so opt/vertica/en-US/VerticaMessages.xml opt/vertica/en-
US/ODBCMessages.xml
COPY odbcinst.ini /etc/
COPY vertica.ini /etc/
COPY bin/Release/netcoreapp3.0/publish/ /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Loader.dll"]
我也尝试了以下方法:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
代替
FROM mcr.microsoft.com/dotnet/core/runtime:3.0.1-buster-slim`
但有同样的错误。 下面是我的 odbinst.ini:
[Vertica]
Description = Vertica driver
Driver = /opt/vertica/lib64/libverticaodbc.so
Driver64 = /opt/vertica/lib64/libverticaodbc.so
下面是我的 vertica.ini:
[Driver]
DriverManagerEncoding=UTF-16
ODBCInstLib = /usr/lib/x86_64-linux-gnu/libodbcinst.so.1
ErrorMessagesPath=/opt/vertica/lib64
LogLevel=4
LogPath=/tmp
以下是我在应用程序中打开连接的方式:
_odbcConn = new OdbcConnection(pConnectionString);
我的连接字符串:
Driver={Vertica};Server=192.168.109.1;Port=5433;Database=testdb;UID=dbadmin;PWD=test
感谢您的帮助,谢谢