Docker-контейнер .NET Core 3.0 не будет подключаться к SQL Server - PullRequest
1 голос
/ 26 сентября 2019

Мы обновили некоторые из наших приложений .NET Core 2.2 до .NET Core 3.0.После обновления наши приложения, работающие в контейнерах Docker, не могут подключиться к SQL Server 2016, работающему на отдельном компьютере в нашей доменной сети.Анализируя трассировку пакетов, мы видим, что соединение зависает при квитировании перед входом в систему и в конечном итоге истекает.Переключение обратно на .NET Core 2.2 немедленно решает проблему, и наши контейнеры могут снова подключаться к нашим базам данных.

Мы явно убедились, что проблем DNS нет, поскольку эти контейнеры работают в .NET Core.2.2..NET Core 3.0 ломает их, так как они не могут подключиться к SQL Server по сети, поэтому мы сейчас возвращаемся к версии 2.2 и прекращаем обновление, пока не сможем определить, почему контейнеры .NET Core 2.2 подключаются к нашим серверам SQL, но .NET Core 3.0Контейнеры этого не делают.

Мы также создали новые проекты .NET Core 3.0 с нуля, чтобы протестировать соединение.Результат тот же: время ожидания контейнеров во время предварительного входа в SQL Server.Вернув проект обратно на .NET Core 2.2 вместе с EF Core обратно на 2.2.6, проблема немедленно решается.

Поскольку мы используем EF Core для доступа к данным, мы также попытались оставить EF Core.на 2.2.6, но при обновлении проекта до .NET Core 3.0, но время соединения все еще истекло.

Если мы не добавим поддержку Docker и не запустим приложения как консольные или веб-приложения (не в контейнерах), тогдаНет проблем с .NET Core 3.0.Только когда мы их контейнеризируем, приложения .NET Core 3.0 не могут подключиться к SQL Server.

В соответствии с предложением Дэна в комментариях ниже, я изменил доступ к данным в тестовом проекте на Microsoft.Data.SqlClient, используярукописный SQL и DataReader.Затем я воссоздал Dockerfile для .net core 3.0 и убедился, что на правильный образ контейнера ссылались.То же поведение: завис на рукопожатии PreLogin с SQL Server.Перешел на .net core 2.2 и смог подключаться и читать данные с SQL Server.

1 Ответ

1 голос
/ 27 сентября 2019

Вероятно, это связано с версией TLS, используемой образом Linux.С помощью команды .NET Core в GitHub мы изменили образ с Buster-Slim на Bionic в Dockerfile.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-bionic AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-bionic AS build

https://github.com/dotnet/SqlClient/issues/222

...