将Linux docker容器内的ASP.NET Core 2.1 API连接到另一台计算机上的SQL Server数据库时出现问题

时间:2018-10-24 19:17:43

标签: docker asp.net-core sql-server-2008-r2 windows-server-2008-r2

我使用实体框架构建了ASP.NET Core 2.1 Web API。现在,我需要将该WebAPI部署到我们的服务器之一。该API可在Visual Studio中完美运行,并且可以访问托管在另一台服务器上的数据库。数据库服务器具有静态IP,只有网络内部的计算机才能访问该IP。

我必须部署的服务器具有以下配置:

  • Windows Server 2008 R2
  • SQL Server 2008 R2
  • Docker ToolBox(由于与我的Windows版本不兼容,我无法使用Docker for Windows)
  • 作为测试,我还禁用了防火墙

这是我的docker文件

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]
  使用与服务器'172.17.16.119,1433'上的数据库'myDatabase'的连接时发生错误。
  System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:TCP Provider,错误:40-无法打开与SQL Server的连接)

     在System.Data.SqlClient.SqlInternalConnectionTds..ctor中的

(DbConnectionPoolIdentity身份,SqlConnectionString connectionOptions,SqlCredential凭据,对象providerInfo,字符串newPassword,SecureString newSecurePassword,布尔型redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,布尔值apply   在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,对象poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions)

我是Docker和ASP.NET的新手,所以任何人都可以指出我可能做错了什么,或者给我一个线索,以便我自己进行调查。

0 个答案:

没有答案