我使用实体框架构建了ASP.NET Core 2.1 Web API。现在,我需要将该WebAPI部署到我们的服务器之一。该API可在Visual Studio中完美运行,并且可以访问托管在另一台服务器上的数据库。数据库服务器具有静态IP,只有网络内部的计算机才能访问该IP。
我必须部署的服务器具有以下配置:
这是我的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]
在System.Data.SqlClient.SqlInternalConnectionTds..ctor中的
使用与服务器'172.17.16.119,1433'上的数据库'myDatabase'的连接时发生错误。
System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:TCP Provider,错误:40-无法打开与SQL Server的连接)(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的新手,所以任何人都可以指出我可能做错了什么,或者给我一个线索,以便我自己进行调查。