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

ASP.NET Core Web API Dockerfile无/src目录问题排查求助

问题排查:Docker构建ASP.NET Core Web API后程序未更新且/src目录缺失

问题背景

使用以下Dockerfile构建ASP.NET Core Web API项目,执行docker-compose up后程序始终是旧版本,同时发现容器里没有/src目录,怀疑这导致项目可执行文件没被正确复制。

容器内目录结构:
容器目录结构

用到的Dockerfile

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

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
WORKDIR "/src/WebApplication1"

COPY . ./
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

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

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

问题分析与解决

1. /src目录不存在是正常情况

你使用了Docker多阶段构建,build、publish阶段的文件不会自动带入最终的final镜像——最终运行的容器基于base阶段构建,WORKDIR是/app,只包含从publish阶段复制过来的/app/publish内容,所以/src目录本就不该出现在运行容器里,这不是程序未更新的原因。

2. 程序停留在旧版本的核心问题

(1)Docker缓存未刷新

Docker会缓存构建的每一层,如果代码没触发缓存失效,会直接复用旧镜像。

  • 解决:执行docker-compose build --no-cache强制跳过缓存,重新构建所有层;或者用docker-compose up --build,让Compose先构建再启动容器。

(2)代码复制路径可能有误

检查执行构建命令的目录是否是项目根目录(即包含WebApplication1.csproj的文件夹)。你在build阶段切换到/src/WebApplication1后执行COPY . ./,如果构建命令不在正确的目录,复制的代码可能不是最新的。

  • 解决:确保在项目根目录下运行docker-compose命令,或者调整COPY的路径为正确的相对路径。

(3)镜像未重新构建

docker-compose up默认复用已有的镜像,不会自动重新构建。

  • 解决:每次更新代码后,用docker-compose up --build替换docker-compose up,确保基于最新代码构建镜像。

验证步骤

  • 用docker images查看镜像的创建时间,确认是否是最新构建的。
  • 进入容器检查/app目录内容:docker exec -it <容器ID> ls -la /app,核对文件修改时间和内容是否为最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:06:23