Blazor Server搭配Docker与MariaDB无法访问问题求助
问题描述
我部署了两个互联的Docker容器:一个是配置正确且正常运行(包含数据)的MariaDB容器;另一个是C# .NET 6 Blazor Server应用容器。数据库连接与Blazor配置均无错误,但浏览器加载应用时仅返回错误:
ERR_EMPTY_RESPONSE
无法通过localhost:8080或0.0.0.0:8080访问应用。以下是相关配置文件及应用日志:
docker-compose.yml配置
version: "3.4" volumes: datafiles: services: db: image: mariadb volumes: - ./dumps:/docker-entrypoint-initdb.d restart: always environment: MARIADB_DATABASE: eventtimeline MARIADB_ROOT_PASSWORD: password MARIADB_USER: gebruiker MARIADB_PASSWORD: password mvc: build: context: . dockerfile: Dockerfile depends_on: - db ports: - "8080:80" volumes: - /EventTimeline/wwwroot:/src/EventTimeline/wwwroot - /EventTimeline/root/.nuget/packages/plotly.blazor/2.18.2/staticwebassets/:/root/.nuget/packages/plotly.blazor/2.18.2/staticwebassets/ - /EventTimeline/root/.nuget/packages/mudblazor/6.11.1/staticwebassets/:/root/.nuget/packages/mudblazor/6.11.1/staticwebassets/ - /src/obj/Release/net6.0/scopedcss/bundle/:/src/obj/Release/net6.0/scopedcss/bundle/ - /src/EventTimeline/obj/Release/net6.0/scopedcss/bundle/:/src/EventTimeline/obj/Release/net6.0/scopedcss/bundle/ restart: always environment: - DBHOST=db - DBPASSWORD=password - ASPNETCORE_ENVIRONMENT=Development - ASPNETCORE_URLS=http://*:8080
Dockerfile配置及应用日志
# Stage for restoring dependencies FROM debian:buster-slim AS debian RUN apt-get update \ && apt-get install -y \ && rm -rf /var/lib/apt/lists/* # Base Stage FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 # Copy project files and restore dependencies FROM base AS restore WORKDIR /src COPY ["EventTimeline/EventTimeline.csproj", "EventTimeline/"] RUN dotnet restore "EventTimeline/EventTimeline.csproj" # Build Stage FROM restore AS build WORKDIR /src COPY . . RUN dotnet build "EventTimeline/EventTimeline.csproj" -c Release -o /app/build # Publish Stage FROM build AS publish WORKDIR /src RUN dotnet publish "EventTimeline/EventTimeline.csproj" -c Release -o /app/publish # Final Stage FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "EventTimeline.dll"]
Output: 2024-01-17 13:22:05 Blazor added 2024-01-17 13:22:05 Added static files 2024-01-17 13:22:05 warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60] 2024-01-17 13:22:05 Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed. 2024-01-17 13:22:05 warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] 2024-01-17 13:22:05 No XML encryptor configured. Key {24098cd6-0d0d-4554-a0a6-c169c9e4aeda} may be persisted to storage in unencrypted form. 2024-01-17 13:22:05 info: Microsoft.Hosting.Lifetime[14] 2024-01-17 13:22:05 Now listening on: http://[::]:8080 2024-01-17 13:22:05 info: Microsoft.Hosting.Lifetime[0] 2024-01-17 13:22:05 Application started. Press Ctrl+C to shut down. 2024-01-17 13:22:05 info: Microsoft.Hosting.Lifetime[0] 2024-01-17 13:22:05 Hosting environment: Development 2024-01-17 13:22:05 info: Microsoft.Hosting.Lifetime[0] 2024-01-17 13:22:05 Content root path: /app/
解决方案
修复端口映射不匹配问题
日志显示应用容器内部监听的是8080端口,但docker-compose中端口映射为8080:80,将主机8080端口映射到容器80端口,导致端口不匹配。两种修复方式:- 修改docker-compose的
ports配置为"8080:8080" - 将环境变量
ASPNETCORE_URLS改为http://*:80,与容器暴露的80端口保持一致
- 修改docker-compose的
验证卷挂载的正确性
当前配置的卷挂载路径(如/EventTimeline/wwwroot)若在主机上不存在,可能导致应用无法读取静态资源甚至启动异常。建议先移除这些挂载配置,测试应用是否能正常访问,确认无问题后再按需配置正确的卷映射路径。检查容器内部端口监听状态
进入应用容器内部,测试端口是否正常监听:docker exec -it <你的mvc容器名称> curl http://localhost:8080如果内部能访问,说明问题出在端口映射;如果内部也无法访问,需排查应用是否有未显示的启动错误。
内容的提问来源于stack exchange,提问作者walmart
相关产品推荐
相关产品推荐

