Я пытаюсь подключиться к серверу DB2 (локально) из контейнера Docker на базе Windows. В настоящее время он использует пакет nuget IMB.Data.DB2.Core (последний). Файл докера — это просто автоматически сгенерированный файл, который Visual Studio 2019 создает без изменений.
Проект настроен на 64-разрядную версию, при сборке нет ошибок или предупреждений.
Я везде искал, как заставить это работать, и не смог найти эту проблему в другом месте. Я подозреваю, что проблема связана с отсутствием у меня знаний о Docker и с тем, что DB2 нуждается в какой-то конкретной настройке внутри контейнера. Я проверил, что файлы копируются (по крайней мере, локально) при сборке, поэтому они должны быть там.
Докерфайл:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-nanoserver-1809 AS build
WORKDIR /src
COPY ["DockerDb2Test.csproj", ""]
RUN dotnet restore "DockerDb2Test.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "DockerDb2Test.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "DockerDb2Test.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "DockerDb2Test.dll"]
Существует контроллер значений по умолчанию, который всегда работает, однако при вызове любого кода, пытающегося получить доступ к DB2, возвращается следующий метод исключения:
Unable to load DLL 'db2app64.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E
)


Необходимо установить один из клиентских пакетов IBM Data Server, который поставляет IBM.Data.DB2.dll и другие сборки/ресурсы/управляемые и неуправляемые зависимости DB2 .NET.
Рекомендуемым тонким клиентом является пакет драйверов IBM Data Server, 10.5 Fixpack 5. Ссылка на последние клиентские пакеты IBM Data Server:
http://www-01.ibm.com/support/docview.wss?uid=swg24038920
Я смог заставить его работать, добавив следующее в Dockerfile над ENTRYPOINT:
ENV LD_LIBRARY_PATH="/app/clidriver/lib/" Env PATH=$PATH:"/app/clidriver/bin:/app/clidriver/lib" RUN apt-получить обновление; \ apt-get install -y libxml2-dev;
Обратите внимание, что я переключился на контейнер Linux: sdk:2.2.300-stretch
Пожалуйста, подпишитесь на пост .Net Core Linux — Docker — Локальная отладка с помощью DB2
Я включил переменную LD_LIBRARY_PATH для добавления в качестве решения. Спасибо.
Какой? Релизу 10.5 исполнилось 5 лет! Существуют гораздо более новые версии клиента, и это даже не самая новая версия 10.5... Эта ссылка всегда перечисляет доступные версии для загрузки. Кроме того, это будет версия для полной платформы .NET. Ему нужен другой для .NET Core. См. эта ссылка для получения дополнительной информации.