Dockerfile 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # 构建阶段
  2. FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
  3. WORKDIR /src
  4. # 复制项目文件
  5. COPY ["src/YZWater.Core/YZWater.Core.csproj", "YZWater.Core/"]
  6. COPY ["src/YZWater.Avalonia/YZWater.Avalonia.csproj", "YZWater.Avalonia/"]
  7. # 还原依赖
  8. RUN dotnet restore "YZWater.Avalonia/YZWater.Avalonia.csproj"
  9. # 复制源代码
  10. COPY src/ .
  11. # 构建
  12. WORKDIR "/src/YZWater.Avalonia"
  13. RUN dotnet build -c Release -o /app/build
  14. # 发布阶段
  15. FROM build AS publish
  16. RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false
  17. # 运行阶段
  18. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
  19. WORKDIR /app
  20. # 安装必要的依赖(Avalonia 需要一些图形库)
  21. RUN apt-get update && apt-get install -y \
  22. libx11-6 \
  23. libx11-xcb1 \
  24. libxext6 \
  25. libxrender1 \
  26. libxtst6 \
  27. libxi6 \
  28. libfontconfig1 \
  29. && rm -rf /var/lib/apt/lists/*
  30. # 复制发布文件
  31. COPY --from=publish /app/publish .
  32. # 创建数据和日志目录
  33. RUN mkdir -p /app/Data /app/Logs /app/Backups
  34. # 设置环境变量
  35. ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
  36. ENV TZ=Asia/Shanghai
  37. # 暴露 WebSocket 端口
  38. EXPOSE 8765
  39. # 启动应用
  40. ENTRYPOINT ["dotnet", "YZWater.Avalonia.dll"]