首页 > 解决方案 > 如何从 Dockerfile 中的上一个目录复制内容

问题描述

下面以dotnet应用代码为例

Dockerfile如下

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /app

COPY *.sln .
COPY . .
WORKDIR /app/src/Web
RUN dotnet restore

RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./

ENV ASPNETCORE_ENVIRONMENT Development

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

我正在执行docker build命令 Dockerfile 位置。

我也尝试docker build -t dotnetcore-eshop-mvc-manual -f src/Web/Dockerfile .D:\eshop\DotneteShopOnWeb>

我收到错误,RUN dotnet restore因为 sln 文件没有被复制到工作目录中。

请让我知道COPY从上一个目录复制内容需要进行哪些修改。

标签: docker.net-coredocker-build

解决方案


您正在恢复之前更改工作目录。我的意思是您的 .sln 文件位于路径 /app 中,但您的恢复是在 /app/src/Web 位置内执行的。你应该做这样的事情来复制 .sln 文件。

COPY *.sln .
COPY . .
WORKDIR /app/src/Web
COPY . .

RUN dotnet restore
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS runtime
WORKDIR /app
COPY --from=build /app/src/Web/out ./

ENV ASPNETCORE_ENVIRONMENT Development

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

推荐阅读