Я пытаюсь докернизировать мое веб-приложение 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"]