Ничего подобного чтению официальной документации ...
https://docs.microsoft.com/en-us/visualstudio/containers/container-build?view=vs-2019#debugging
Отладка
Когда Встраивая в конфигурацию Debug, Visual Studio выполняет несколько оптимизаций, помогающих повысить производительность процесса сборки для контейнерных проектов. Процесс сборки для контейнерных приложений не так прост, как простое выполнение шагов, описанных в Dockerfile. Сборка в контейнере происходит намного медленнее, чем сборка на локальной машине. Итак, когда вы встраиваете в конфигурацию Debug, Visual Studio фактически строит ваши проекты на локальном компьютере, а затем разделяет папку вывода в контейнере, используя монтирование тома. Сборка с включенной оптимизацией называется сборкой в быстром режиме.
В быстром режиме Visual Studio вызывает сборку docker с аргументом, указывающим Docker строить только базовый этап. Visual Studio обрабатывает остальную часть процесса независимо от содержимого файла Dockerfile. Поэтому, когда вы изменяете свой файл Dockerfile, например, для настройки среды контейнера или установки дополнительных зависимостей, вы должны поместить свои изменения на первом этапе. Любые пользовательские шаги, помещенные в сборку, публикацию sh или финальные этапы Dockerfile, не будут выполняться.
Эта оптимизация производительности происходит только при сборке в конфигурации Debug. В конфигурации Release сборка происходит в контейнере, как указано в Dockerfile.
Я помещаю RUN touch test.txt
и ENV my_variable value
в первые строки (где базовый этап сборки Dockerfile), и это работает.
Подсказка относится к RUN touch test.txt
, это необходимо выполнить (WORKDIR) в другой папке, отличной от папки, сопоставленной с исходным кодом в hostlocal (/app).
Пример:
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"]