Я создал веб-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, поэтому кто-нибудь может указать мне, что я делаю неправильно, или дать мне подсказку, чтобы я мог провести расследование самостоятельно.