.NET 8后台服务Docker容器无法启动问题求助
.NET 8 Worker服务Docker容器启动失败排查求助
我正在开发一个连接Docker部署的RabbitMQ服务器与SQL数据库的.NET 8后台服务。该服务在Visual Studio 2022调试模式下、发布后注册为Windows 11本地服务时均运行正常,但通过编写的Dockerfile构建镜像并创建容器后,容器无法启动。
详细信息
- 解决方案文件夹结构:主目录下包含LogRecord_Service、Database_Logic_Layer、DataAccess、Helpers、Geotab_Logic_Layer、QueueManagement等项目文件夹
- 项目文件:
<Project Sdk="Microsoft.NET.Sdk.Worker"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>dotnet-LogRecord_Service-2087123f-9942-4cc7-aa76-8c572656e691</UserSecretsId> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" /> <PackageReference Include="NLog" Version="5.2.8" /> <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" /> <PackageReference Include="NLog.Web.AspNetCore" Version="5.3.8" /> <PackageReference Include="Quartz" Version="3.8.1" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Database_Logic_Layer\Database_Logic_Layer.csproj" /> <ProjectReference Include="..\Geotab_Logic_Layer\Geotab_Logic_Layer.csproj" /> <ProjectReference Include="..\QueueManagement\QueueManagement.csproj" /> </ItemGroup> </Project>
- Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["LogRecord_Service/LogRecord_Service.csproj", "LogRecord_Service/"] COPY ["Database_Logic_Layer/Database_Logic_Layer.csproj", "Database_Logic_Layer/"] COPY ["DataAccess/DataAccess.csproj", "DataAccess/"] COPY ["Helpers/Helpers.csproj", "Helpers/"] COPY ["Geotab_Logic_Layer/Geotab_Logic_Layer.csproj", "Geotab_Logic_Layer/"] COPY ["QueueManagement/QueueManagement.csproj", "QueueManagement/"] RUN dotnet restore "./LogRecord_Service/LogRecord_Service.csproj" COPY . . WORKDIR "/src/LogRecord_Service" RUN dotnet build "./LogRecord_Service.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./LogRecord_Service.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "LogRecord_Service.dll"]
- 镜像构建日志:
docker build -t log_record_producer_image . [+] Building 1.2s (22/22) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.31kB 0.0s => [internal] load metadata for mcr.microsoft.com/dotnet/runtime:8.0 0.0s => [internal] load metadata for mcr.microsoft.com/dotnet/sdk:8.0 0.4s => [internal] load .dockerignore 0.0s => => transferring context: 464B 0.0s => [build 1/12] FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:9bb0d97c4361cc844f225c144ac2adb2b65fabfef21f95caedcf215d844238fe 0.0s => CACHED [final 1/3] FROM mcr.microsoft.com/dotnet/runtime:8.0 0.0s => [internal] load build context 0.1s => => transferring context: 6.22kB 0.0s => [final 2/3] WORKDIR /app 0.1s => CACHED [build 2/12] WORKDIR /src 0.0s => CACHED [build 3/12] COPY [LogRecord_Service/LogRecord_Service.csproj, LogRecord_Service/] 0.0s => CACHED [build 4/12] COPY [Database_Logic_Layer/Database_Logic_Layer.csproj, Database_Logic_Layer/] 0.0s => CACHED [build 5/12] COPY [DataAccess/DataAccess.csproj, DataAccess/] 0.0s => CACHED [build 6/12] COPY [Helpers/Helpers.csproj, Helpers/] 0.0s => CACHED [build 7/12] COPY [Geotab_Logic_Layer/Geotab_Logic_Layer.csproj, Geotab_Logic_Layer/] 0.0s => CACHED [build 8/12] COPY [QueueManagement/QueueManagement.csproj, QueueManagement/] 0.0s => CACHED [build 9/12] RUN dotnet restore "./LogRecord_Service/LogRecord_Service.csproj" 0.0s => CACHED [build 10/12] COPY . . 0.0s => CACHED [build 11/12] WORKDIR /src/LogRecord_Service 0.0s => CACHED [build 12/12] RUN dotnet build "./LogRecord_Service.csproj" -c Release -o /app/build 0.0s => CACHED [publish 1/1] RUN dotnet publish "./LogRecord_Service.csproj" -c Release -o /app/publish /p:UseAppHost=false 0.0s => [final 3/3] COPY --from=publish /app/publish . 0.5s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:bc73c757dec2ead70c8db7df5a2e08fe9665e8b0396ab2a141bf590fd449af82 0.0s => => naming to docker.io/library/log_record_producer_image 0.0s View build details: docker-desktop://dashboard/build/default/default/r14olesvrbxevmit01mirf4ev What's Next? View a summary of image vulnerabilities and recommendations → docker scout quickview
- 容器启动失败日志:应用启动时抛出未处理异常,进程退出代码为1,具体表现为无法加载必要的配置文件或依赖项
此前用类似Dockerfile构建.NET 8控制台应用容器运行正常,已尝试排查AI建议、GitHub同类问题但未解决,恳请帮忙定位问题。
内容的提问来源于stack exchange,提问作者Sphesihle Jamile
相关产品推荐
相关产品推荐

