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

构建ASP.NET 6 API Docker镜像时,WORKDIR /server报错:非目录

问题分析与解决方案

你的Docker构建失败的核心原因是:COPY单个文件时,目标路径/server不存在,Docker会将其创建为文件而非目录,后续执行WORKDIR /server时自然报错,因为/server是文件不是目录。

修正方案一:复制时指定目标为目录(加斜杠)

修改COPY命令,在目标路径末尾添加斜杠,明确告诉Docker要将文件复制到目录下,Docker会自动创建不存在的目录:

FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
WORKDIR /app
# 目标路径末尾加/,确保Docker创建/server目录并将文件复制进去
COPY Tetris.Blazor/Server/Tetris.Blazor.Server.csproj /server/
WORKDIR /server
RUN dotnet restore Tetris.Blazor.Server.csproj

修正方案二:提前创建目标目录

先通过RUN mkdir命令手动创建/server目录,再复制文件:

FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
WORKDIR /app
# 提前创建/server目录
RUN mkdir -p /server
COPY Tetris.Blazor/Server/Tetris.Blazor.Server.csproj /server/
WORKDIR /server
RUN dotnet restore Tetris.Blazor.Server.csproj

更规范的DotNet容器构建写法(可选)

通常DotNet容器构建会保持项目目录结构,这样后续复制完整代码时更方便,示例如下:

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
# 保持项目目录结构复制csproj
COPY Tetris.Blazor/Server/Tetris.Blazor.Server.csproj Tetris.Blazor/Server/
# 直接基于目录结构执行restore
RUN dotnet restore Tetris.Blazor/Server/Tetris.Blazor.Server.csproj

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:13:11