gpt4 book ai didi

visual-studio - ASPNET Core 3.1 - Dockerfile 更改在 Visual Studio 中运行时不起作用

转载 作者:行者123 更新时间:2023-12-02 18:50:47 25 4
gpt4 key购买 nike

我在 Visual Studio 2019( Debug模式下的 F5)中运行 Web API(ASPNETCore 3.1 - API),我使用 Docker(适用于 Linux),当我更改 Dockerfile 并运行应用程序时,更改不起作用。

例子:我将 RUN touch test.txtENV my_variable value 放在 Dockerfile 中,但没有创建文件和变量。

enter image description here

有人知道为什么吗?

最佳答案

没有什么比阅读官方文档...

https://learn.microsoft.com/en-us/visualstudio/containers/container-build?view=vs-2019#debugging

调试

在调试配置中构建时,Visual Studio 进行了多项优化,有助于提高容器化项目构建过程的性能。容器化应用程序的构建过程并不像简单地遵循 Dockerfile 中概述的步骤那样简单。在容器中构建比在本地机器上构建要慢得多。 因此,当您在调试配置中构建时,Visual Studio 实际上会在本地计算机上构建您的项目,然后使用卷安装将输出文件夹共享到容器。启用此优化的构建称为快速模式构建。

在快速模式下,Visual Studio 调用 docker build 时带有一个参数,告诉 Docker 仅构建基础阶段。 Visual Studio 处理剩余的过程而不考虑 Dockerfile 的内容。 因此,当您修改 Dockerfile 时,例如自定义容器环境或安装额外的依赖项,您应该将您的修改放在第一阶段。放置在 Dockerfile 的构建、发布或最终阶段的任何自定义步骤都不会执行。

此性能优化仅在您在调试配置中构建时发生。在 Release 配置中,构建发生在 Dockerfile 中指定的容器中。

我将 RUN touch test.txtENV my_variable value 放在第一行(Dockerfile 构建基础阶段的地方)并且它有效。

一个提示是指RUN touch test.txt,这需要在与本地主机(/app)中与源代码映射的文件夹不同的另一个文件夹中执行(WORKDIR)。

例子:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /tmp
RUN touch teste.txt
WORKDIR /app
ENV my_variable value
EXPOSE 80
EXPOSE 443

我最终的 Dockerfile 是:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /tmp
RUN touch teste.txt
RUN echo "teste1" > teste1.txt
WORKDIR /app
ENV my_variable value
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MyTestProject/TestProject.csproj", "MyTestProject/"]
RUN dotnet restore "MyTestProject/TestProject.csproj"
COPY . .
WORKDIR "/src/MyTestProject"
RUN dotnet build "TestProject.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV my_variable value
RUN touch teste.txt
ENTRYPOINT ["dotnet", "TestProject.dll"]

关于visual-studio - ASPNET Core 3.1 - Dockerfile 更改在 Visual Studio 中运行时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60941523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com