Проблема с подключением API ASP.NET Core 2.1 в док-контейнере Linux к базе данных SQL Server на другом компьютере - PullRequest
0 голосов
/ 24 октября 2018

Я создал веб-API ASP.NET Core 2.1 с использованием Entity Framework.Теперь мне нужно развернуть этот WebAPI на одном из наших серверов.API прекрасно работает в Visual Studio, с доступом к базе данных, размещенной на другом сервере.Сервер базы данных имеет статический IP-адрес, который доступен только машинам в сети.

Сервер, на котором необходимо развернуть, имеет следующую конфигурацию:

  • Windows Server 2008 R2
  • SQL Server 2008 R2
  • Панель инструментов Docker (я не могу использовать Docker для Windows, поскольку она несовместима с моей версией Windows)
  • В качестве теста я также отключил брандмауэр

Это мой файл докера

FROM microsoft/dotnet:2.1-sdk AS build-env
WORKDIR /app

EXPOSE 1433 
EXPOSE 8080


# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.1-sdk
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "myApp.dll"]

При создании образа я использую следующую команду:

Docker build -t myApp .

Когда я запускаю контейнер

docker run  -d -p 8080:80 --name api myapp 

Я также попробовал следующую команду, но безрезультатно:

docker run  -d -p --net:host --name api myapp 

Теперь подключение к базе данных осуществляется через переменную среды с именем API_DBCON .Я добавляю эту переменную среды от Kitematic.

Всякий раз, когда я запускаю контейнер, я получаю следующее сообщение об ошибке:

Microsoft.EntityFrameworkCore.Database.Connection [20004]
Произошла ошибка при подключении к базе данных 'myDatabase'на сервере' 172.17.16.119,1433 '.
System.Data.SqlClient.SqlException (0x80131904): при установлении соединения с SQL Server произошла ошибка сети или конкретного экземпляра.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: поставщик TCP, ошибка: 40 - не удалось открыть соединение с SQL Server)

в System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo String,новый_пароль, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
в System.Data.SqlClient.SqlConnectionFactory.CreateConnection (опции DbConnectionOptions, DbConnectionPoolKey poolKey, объект poolGroupProviderInfo, DbConnectionPool бассейн, DbConnection owningConnection, DbConnectionOptions userOptions)

Я новичок в Docker и ASP.NET, поэтому кто-нибудь может указать мне, что я делаю неправильно, или дать мне подсказку, чтобы я мог провести расследование самостоятельно.

...