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

ASP.NET Core WebAPI启动URL差异:Docker Compose vs Docker Build

.NET 6 WebAPI在Docker Compose与Docker Build构建下的K8s启动行为差异

环境

  • Minikube v1.26.1
  • Docker Desktop v4.12
  • Docker Compose v2.10.2

使用Docker Compose构建

因需读取父目录文件,将构建上下文设为父目录,docker-compose.yml配置如下:

version: "3.8"
services:
  web.api:
   build:
      context: ./../
      dockerfile: ./web.API/Dockerfile

对应的Dockerfile内容:

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build 
WORKDIR /src

ENV ASPNETCORE_URLS=http://+:80

COPY Directory.Build.props ./Directory.Build.props
COPY .editorconfig ./.editorconfig
COPY ["webapi/web.API", "web.API/"]
RUN dotnet build "web.API/web.API.csproj" -c Release --self-contained true --runtime alpine-x64

RUN dotnet publish "webapi/web.API.csproj"  -c Release -o /app/publish \
    --no-restore \
    --runtime alpine-x64 \
    --self-contained true \
    /p:PublishSingleFile=true

FROM mcr.microsoft.com/dotnet/runtime-deps:6.0-alpine
WORKDIR /app

EXPOSE 80
EXPOSE 443

COPY --from=build /app/publish .
ENTRYPOINT ["./web.API"]

此构建方式下,应用部署到K8s集群后的启动日志:

Now listening on: http://[::]:80

使用Docker Build构建

使用与上述完全相同的Dockerfile和构建上下文,应用部署到K8s后的启动日志:

Now listening on: http://localhost:5000

本地运行镜像

将K8s集群中的镜像拉取到本地运行,日志显示:

Now listening on: http://[::]:80

已尝试方案

  • 在Dockerfile中设置ASPNETCORE_URLS环境变量,无法改变启动URL
  • 在K8s deployment.yml中配置该环境变量,同样无效,暂未明确差异产生的原因

更新

目前唯一有效的解决方法是在Program.cs中添加以下代码强制指定监听地址:

builder.WebHost.ConfigureKestrel(option =>{
    option.ListenAnyIP(80);
});

但仍未明确两种构建方式导致启动行为差异的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:55:18