# 使用官方.NET 9.0运行时镜像作为基础镜像 FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base WORKDIR /app EXPOSE 7860 # 安装supervisor和其他必要工具 RUN apt-get update && apt-get install -y \ supervisor \ curl \ && rm -rf /var/lib/apt/lists/* # 创建supervisor配置目录 RUN mkdir -p /var/log/supervisor /etc/supervisor/conf.d # 复制supervisor配置文件 COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 设置正确的权限 RUN chmod 755 /var/log/supervisor /etc/supervisor/conf.d # 使用官方.NET 9.0 SDK镜像进行构建 FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src # 复制项目文件 COPY ["ToolHub.csproj", "./"] RUN dotnet restore "ToolHub.csproj" # 复制所有源代码 COPY . . WORKDIR "/src" # 构建应用 RUN dotnet build "ToolHub.csproj" -c Release -o /app/build # 发布应用 FROM build AS publish RUN dotnet publish "ToolHub.csproj" -c Release -o /app/publish /p:UseAppHost=false # 最终镜像 FROM base AS final WORKDIR /app # 复制发布的应用 COPY --from=publish /app/publish . # 复制启动脚本 COPY start.sh /app/start.sh RUN chmod +x /app/start.sh # 创建数据目录 RUN mkdir -p /app/data # 设置目录权限 RUN chown -R root:root /app && chmod -R 755 /app # 设置环境变量 ENV ASPNETCORE_URLS=http://+:7860 ENV ASPNETCORE_ENVIRONMENT=Production ENV DOTNET_RUNNING_IN_CONTAINER=true # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/ || exit 1 # 直接启动应用(不使用supervisor) CMD ["/app/start.sh"]