Docker Compose模式下EF Core 8无法创建SQL Server数据库的问题
解决ASP.NET Core 8 Docker镜像中EF Core迁移缺失libgssapi_krb5.so.2的问题
问题原因
.NET 8官方ASP.NET镜像(基于Debian Bookworm)默认未包含Kerberos相关依赖库libgssapi_krb5.so.2,而EF Core连接SQL Server时会尝试加载该库用于身份验证逻辑,导致迁移失败。.NET 6镜像因基础系统版本差异默认包含该依赖,因此无此问题。
解决方案
修改Dockerfile,在final阶段安装krb5-user包(该包包含所需的libgssapi_krb5.so.2库),具体修改如下:
修改后的Dockerfile
# Use a Debian-based image with ASP.NET runtime FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER app WORKDIR /app EXPOSE 8081 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["src/Web/LightCleanArchitecture.WebApi.csproj", "src/Web/"] COPY ["src/Application/LightCleanArchitecture.Application.csproj", "src/Application/"] COPY ["src/Domain/LightCleanArchitecture.Domain.csproj", "src/Domain/"] COPY ["src/Infrastructure/LightCleanArchitecture.Infrastructure.csproj", "src/Infrastructure/"] RUN dotnet restore "./src/Web/./LightCleanArchitecture.WebApi.csproj" COPY . . WORKDIR "/src/src/Web" RUN dotnet build "./LightCleanArchitecture.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./LightCleanArchitecture.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app # 安装krb5-user依赖包 USER root RUN apt-get update && apt-get install -y --no-install-recommends krb5-user && rm -rf /var/lib/apt/lists/* USER app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "LightCleanArchitecture.WebApi.dll"]
关键修改说明
- 临时切换到
root用户执行系统安装命令,因为默认app用户无系统权限 - 使用
--no-install-recommends参数安装最小化依赖,避免镜像体积膨胀 - 安装完成后切回
app用户,保持镜像安全性 - 清理apt缓存减少镜像体积
验证步骤
重新构建并启动容器:
docker-compose down docker-compose build docker-compose up
观察容器日志,EF Core迁移应能正常执行,不再出现libgssapi_krb5.so.2缺失的错误。
内容的提问来源于stack exchange,提问作者Saber Motamedi
相关产品推荐
相关产品推荐

