【问题标题】:Dockerfile weird paths generated by Visual StudioVisual Studio 生成的 Dockerfile 奇怪路径
【发布时间】:2021-03-27 17:35:30
【问题描述】:

我正在使用 Jason Taylor 的 Clean Architecture template,我想知道为什么他的 WebUI Dockerfile 是由 Visual Studio 生成的,如下所示。

它将WORKDIR 设置为/src,然后从/src/ProjectDir/Project.csproj 复制每个项目。在这种情况下,WORKDIR 有什么意义?看看WORKDIR "/src/src/WebUI"。为什么/src/srcsrc 目录只有一个。

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
ENV ASPNETCORE_URLS=https://+:5001;http://+:5000
WORKDIR /app
EXPOSE 5000
EXPOSE 5001

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt install -y nodejs
WORKDIR /src
COPY ["src/WebUI/WebUI.csproj", "src/WebUI/"]
COPY ["src/Application/Application.csproj", "src/Application/"]
COPY ["src/Domain/Domain.csproj", "src/Domain/"]
COPY ["src/Infrastructure/Infrastructure.csproj", "src/Infrastructure/"]
RUN dotnet restore "src/WebUI/WebUI.csproj"
COPY . .
WORKDIR "/src/src/WebUI"
RUN dotnet build "WebUI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebUI.csproj" -c Release -o /app/publish

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

【问题讨论】:

    标签: dockerfile clean-architecture asp.net-core-5.0


    【解决方案1】:

    我怀疑这是因为WORKDIR /src 将创建一个名为 /src 的目录并将目录更改为该目录。更改为它后,它将文件从主机的相关 src 文件夹复制到另一个名为 src 的子目录(在容器上)。所以完整的绝对路径变成了/src/src。您可以通过在WORKDIR 之前和第一个COPY 之后添加RUN pwd && ls 来确认这一点。

    FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
    ENV ASPNETCORE_URLS=https://+:5001;http://+:5000
    WORKDIR /app
    EXPOSE 5000
    EXPOSE 5001
    
    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
    RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
    RUN apt install -y nodejs
    RUN pwd && ls /
    WORKDIR /src
    COPY ["src/WebUI/WebUI.csproj", "src/WebUI/"]
    RUN pwd && ls
    COPY ["src/Application/Application.csproj", "src/Application/"]
    COPY ["src/Domain/Domain.csproj", "src/Domain/"]
    COPY ["src/Infrastructure/Infrastructure.csproj", "src/Infrastructure/"]
    RUN dotnet restore "src/WebUI/WebUI.csproj"
    COPY . .
    WORKDIR "/src/src/WebUI"
    RUN dotnet build "WebUI.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "WebUI.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "CleanArchitecture.WebUI.dll"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-06
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      相关资源
      最近更新 更多