【问题标题】:asp.net core 3.0 docker image failing to createasp.net core 3.0 docker镜像创建失败
【发布时间】: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


【解决方案1】:

在运行容器时,您的服务无法解析 docker server 内的 sql server 连接字符串中提供的 IP 地址。

我建议您按照内联提供的步骤将您的 sql 服务器与 .net 核心应用程序连接

compose asp.net core service with sql server via docker compose

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2022-01-02
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多