You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器已运行但localhost无法访问网站(404错误)

ASP.NET网站Docker容器运行返回404问题排查

可能的原因及排查步骤

1. 端口映射未配置

你的Dockerfile暴露了80端口,但启动容器时必须显式配置端口映射,否则宿主机无法访问容器内的服务。执行启动命令时需添加端口映射参数:

docker run -p 80:80 <你的镜像名称/ID>

2. 应用未正常启动(含数据库连接问题)

本地PostgreSQL的localhost在容器内指向容器自身,无法访问宿主机的数据库,这可能导致应用启动失败或服务异常,进而返回404。

  • 查看容器日志:执行docker logs <容器ID/名称>,检查应用启动时是否有数据库连接报错或其他启动异常信息。
  • 修正数据库连接地址:将配置文件中的数据库地址改为宿主机的局域网IP,或使用host.docker.internal(Windows/macOS/Linux均支持),同时确保PostgreSQL允许外部连接:
    • 修改pg_hba.conf,添加允许容器网段的访问规则(如host all all 172.17.0.0/16 md5)
    • 修改postgresql.conf,将listen_addresses设为*

3. 应用路由或静态文件问题

本地运行正常不代表容器内Release模式下配置正确:

  • 检查容器内文件完整性:进入容器查看发布文件是否齐全:
    docker exec -it <容器ID> bash
    ls /app
    
    确认静态文件(React打包后的文件)、dll文件是否存在,且dll名称与ENTRYPOINT中的ReactJS App.dll一致(项目名带空格可能引发命名问题,建议改为无空格的项目名)。
  • 测试容器内部访问:在容器内执行curl http://localhost或curl http://localhost/api/xxx,若内部访问也返回404,说明是应用路由配置或启动逻辑问题,需检查Release模式下的路由注册、静态文件中间件配置。

4. Dockerfile潜在问题

项目名包含空格可能导致发布或启动时出现隐性问题,建议将项目名改为ReactJSApp这类无空格名称,同时更新Dockerfile中的对应路径和命令:

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["ReactJSApp/ReactJSApp.csproj", "ReactJSApp/"]
RUN dotnet restore "ReactJSApp/ReactJSApp.csproj"
COPY . .
WORKDIR "/src/ReactJSApp"
RUN dotnet build "ReactJSApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ReactJSApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ReactJSApp.dll"]

内容的提问来源于stack exchange,提问作者trying

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:30:03