Приложение, работающее на образе Linux Docker, не может подключиться к серверу SQL на локальной машине Windows - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь докернизировать мое веб-приложение ASP.Net Core 2.2, запустив образ Linux Docker.Однако я получаю следующую ошибку при попытке подключиться к серверу SQL, работающему на локальной машине Windows.Вот некоторые из вещей, которые я пробовал:

  • , включающий TCP\IP в конфигурации сети SQL Server, Listen All имеет значение yes, IPAddress => IPAll => TCP Port = 49172
  • отключение брандмауэра Windows в публичной сети.
  • Изменение строки подключения моего сервера SQL для использования моего IPv4-адреса, например: вместо DataSource=DESKTOP-2LS7578\\SQLEXPRESS использовать DataSource=192.168.18.65\\SQLEXPRESS
  • Добавлено правило в брандмауэре Windows, разрешающее входящий трафик с порта 49172, изменил мой SQLСтрока подключения к серверу для использования IP-адреса, указанного в DockerNAT и порту 49172. Например: вместо DataSource=DESKTOP-2LS7578\\SQLEXPRESS используйте DataSource=<IP Address listed under NAT>\\SQLEXPRESS:49172
  • , чтобы убедиться, что служба браузера моего сервера sql запущена.

Обновление 2 (используя инструкции от здесь ):

  • изменил строку подключения к моему SQL-серверу для использования указанного портав конфигурации сети SQL Server => TCP \ IP => IP-адрес => IPAll => динамический порт TCP, чтобы он стал «host.docker.internal \ SQLEXPRESS»,
  • Включите брандмауэр для порта, который вы нашли

Что еще можно попробовать?

StackTrace:

Произошло необработанное исключение при обработке запроса.
SocketException: Success
Microsoft.Data.SqlClient.SNI.SSRP.GetPortByInstanceName (строка browserHostName, строка instanceName)

SqlException: ошибка, связанная с сетью или экземпляром, возникла при установлении соединения с SQL Server.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик TCP, ошибка: 25 - строка подключения недопустима)

Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor (идентификатор DbConnectionPoolIdentity, SqlConnectionString connectionOptions, SqlCredential учетные данные, объект providerInfo, строка newPasswordSecure, строка newPasswordecword, bool redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, bool applyTransientFaultHandling, строка accessToken)

Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["Scrubber/Scrubber.csproj", "Scrubber/"]
COPY ["SimplerProducts.MicrosoftEntityFrameworkCoreStorage/SimplerProducts.MicrosoftEntityFrameworkCoreStorage.csproj", "SimplerProducts.MicrosoftEntityFrameworkCoreStorage/"]
RUN dotnet restore "Scrubber/Scrubber.csproj"
COPY . .
WORKDIR "/src/Scrubber"
RUN dotnet build "Scrubber.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Scrubber.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Scrubber.dll"]

1 Ответ

0 голосов
/ 01 июля 2019

Мне удалось заставить приложение работать, не указав имя экземпляра в строке подключения и используя аутентификацию сервера SQL. т.е. изменить строку подключения с Data Source=DESKTOP-2LS7578\\SQLEXPRESS;Integrated Security=True; на Data Source=host.docker.internal,1433;User ID=<UserID>;Password=<Password>;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...