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

.NET 7 Docker应用启动重定向至https://localhost:0/swagger报404求助

.NET 7 Docker应用重定向到https://localhost:0/swagger导致404的问题排查与解决

问题场景

尝试使用Docker运行.NET 7简易应用,Dockerfile配置如下:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
EXPOSE 80
WORKDIR /src
COPY . .
RUN dotnet restore 
RUN dotnet publish -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:7.0    
EXPOSE 80

WORKDIR /app
COPY --from=build-env /app/publish .


ENTRYPOINT ["dotnet", "CourierService.dll"]

启动后应用被重定向至https://localhost:0/swagger,点击该链接后跳转至404页面。此应用2个月前运行无异常,当前通过VS在配置为Linux环境的Docker Desktop中运行,容器已存在,应用启动日志如下:

[11:11:34] level=debug traceID= requestID= Hosting starting
[11:11:34] level=debug traceID= requestID= Using development certificate: CN=localhost (Thumbprint: B990ECE9DA37AE025931FC26600F87A672012D99)
[11:11:34] level=information traceID= requestID= Now listening on: https://[::]:443
[11:11:34] level=information traceID= requestID= Now listening on: http://[::]:80
[11:11:34] level=debug traceID= requestID= Loaded hosting startup assembly CourierService
[11:11:34] level=information traceID= requestID= Application started. Press Ctrl+C to shut down.
[11:11:34] level=information traceID= requestID= Hosting environment: Development
[11:11:34] level=information traceID= requestID= Content root path: /app
[11:11:34] level=debug traceID= requestID= Hosting started

原因分析

  • 端口映射失效:日志显示容器内应用正常监听80(HTTP)和443(HTTPS)端口,但VS自动配置的端口映射出现异常,导致生成了localhost:0这种包含无效端口的访问地址。
  • HTTPS重定向冲突:应用处于Development环境,默认启用HTTPS重定向,但容器内的HTTPS证书在本地访问时的信任问题,叠加端口映射错误,导致重定向目标地址无效。
  • Swagger路由无法匹配:即使Swagger在Development环境下正常启用,无效的端口地址也会导致请求无法正确路由到Swagger端点,最终返回404。

解决方法

1. 修正Docker端口映射

  • 在VS的调试属性中,手动配置容器端口与本地端口的映射:将容器80端口映射到本地有效端口(如5000),443端口映射到本地5001端口。
  • 手动启动容器时,执行以下命令指定端口映射:
docker run -p 5000:80 -p 5001:443 your-image-tag

2. 调整HTTPS相关配置

  • 临时禁用HTTPS重定向(仅用于调试):在Program.cs中注释或移除app.UseHttpsRedirection();代码。
  • 信任开发证书:Windows系统执行dotnet dev-certs https --trust,macOS/Linux按照系统流程添加并信任Docker生成的localhost证书。

3. 验证Swagger配置与访问地址

  • 确认Program.cs中Swagger仅在Development环境下正确启用:
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
  • 使用正确的地址访问Swagger:http://localhost:5000/swagger或https://localhost:5001/swagger,避免使用带:0的无效地址。

4. 重建镜像并清理旧容器

由于镜像缓存可能导致环境不一致,执行以下命令重新构建镜像并清理旧容器:

docker build -t courier-service .
docker rm -f $(docker ps -aq --filter name=courier-service)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:21:31