# 构建阶段 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src # 复制项目文件 COPY ["src/YZWater.Core/YZWater.Core.csproj", "YZWater.Core/"] COPY ["src/YZWater.Avalonia/YZWater.Avalonia.csproj", "YZWater.Avalonia/"] # 还原依赖 RUN dotnet restore "YZWater.Avalonia/YZWater.Avalonia.csproj" # 复制源代码 COPY src/ . # 构建 WORKDIR "/src/YZWater.Avalonia" RUN dotnet build -c Release -o /app/build # 发布阶段 FROM build AS publish RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false # 运行阶段 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app # 安装必要的依赖(Avalonia 需要一些图形库) RUN apt-get update && apt-get install -y \ libx11-6 \ libx11-xcb1 \ libxext6 \ libxrender1 \ libxtst6 \ libxi6 \ libfontconfig1 \ && rm -rf /var/lib/apt/lists/* # 复制发布文件 COPY --from=publish /app/publish . # 创建数据和日志目录 RUN mkdir -p /app/Data /app/Logs /app/Backups # 设置环境变量 ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false ENV TZ=Asia/Shanghai # 暴露 WebSocket 端口 EXPOSE 8765 # 启动应用 ENTRYPOINT ["dotnet", "YZWater.Avalonia.dll"]