【发布时间】:2020-10-25 01:59:57
【问题描述】:
我正在使用带有 sql server 的 asp.net core 3.0,尝试使用 docker 创建微服务。但是,当我尝试运行 docker-compose 时,我得到了
“迁移或植入数据库时发生错误。”错误。我在代码中有实体框架 3.1 迁移,当新的数据库容器启动时,我相信它正在尝试运行迁移,但可能是数据库不存在。
我的 Startup.cs
public void ConfigureServices(IServiceCollection services)
{
var server = Configuration["DBServer"] ?? "192.168.0.3";
var port = Configuration["DBPort"] ?? "1432";
var user = Configuration["DBUser"] ?? "SA";
var password = Configuration["DBPassword"] ?? "Passw0rd1!";
var database = Configuration["Database"] ?? "AFE-Sales";
services.AddDbContext<InsuranceContext>(options => options.UseSqlServer($"Server={server},{port};Initial Catalog={database};User ID = {user}; Password={password}"));
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["src/WebUI/WebUI.csproj", "src/WebUI/"]
COPY ["src/Application/Application.csproj", "src/Application/"]
COPY ["src/Domain/Domain.csproj", "src/Domain/"]
COPY ["src/Infrastructure/Infrastructure.csproj", "src/Infrastructure/"]
RUN dotnet restore "src/WebUI/WebUI.csproj"
COPY . .
WORKDIR "/src/src/WebUI"
RUN dotnet build "WebUI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebUI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Insurance.WebUI.dll"]
Docker-compose
version: '3.4'
services:
ms-sql-server:
image: "mcr.microsoft.com/mssql/server:2017-latest-ubuntu"
environment:
ACCEPT_EULA: "Y"
SA_PASSWORD: "Passw0rd1!"
MSSQL_PID: Express
ports:
- "5432:5432"
- "1433:1433"
webui:
image: ${DOCKER_REGISTRY-}webui
container_name: mortgage
build:
context: .
dockerfile: src/WebUI/Dockerfile
ports:
- 5000:80
environment:
DBServer: "192.168.0.3"
DBPort: "1432"
DBUser: "SA"
DBPassword: "Passw0rd1!"
Database: "mortgage"
depends_on:
- ms-sql-server
数据库上下文
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=192.168.0.3,1432;Database=AFE-Sales;User ID=SA;Password=Passw0rd1!");
}
base.OnConfiguring(optionsBuilder);
}
appsettings.json
{
"UseInMemoryDatabase": true,
"ConnectionStrings": {
"Default": "Server=192.168.0.3,1432;Database=mortgage;User ID=SA;Password=Passw0rd1!",
我遇到的错误
“抵押|失败:Insurance.WebUI.Program[0] 抵押贷款|迁移或植入数据库时发生错误。 抵押贷款| Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP 提供者,错误:40 - 无法打开与 SQL Server 的连接) 抵押贷款|在 Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,布尔 applyTransientFaultHandling,字符串 accessToken,DbConnectionPool 池,SqlAuthenticationProviderManager sqlAuthProviderManager )"*
【问题讨论】:
-
您的 Docker Compose 已将端口 1433 映射到您的 SQL Server,但您的应用程序正在尝试访问端口 1432
标签: asp.net docker asp.net-core asp.net-web-api docker-compose