AS PNET Core 3.1 - Изменения Dockerfile не работают при запуске в Visual Studio - PullRequest
1 голос
/ 31 марта 2020

Я запускаю веб-API (ASPNETCore 3.1 - API) в Visual Studio 2019 (F5 в режиме отладки), я использую Docker (для Linux), когда я изменяю Dockerfile и запускаю приложение, изменения не работа.

Пример: я поместил RUN touch test.txt и ENV my_variable value в Dockerfile, но файл и переменная не созданы.

enter image description here

Кто-нибудь знает почему?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Ничего подобного чтению официальной документации ...

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"]
0 голосов
/ 02 апреля 2020

Вы можете включить дополнительные файлы среды для передачи в команду docker run, добавив следующий тег DockerfileRunEnvironmentFiles в группу свойств в файле .csproj:

<PropertyGroup>
   <DockerfileRunEnvironmentFiles>your_env_file.env</DockerfileRunEnvironmentFiles>
   ... 
   ...
<PropertyGroup>

your_env_file.env:

PAT=[Personal Access Token]
PROJECT=[Azure DevOps Project URL]
VARIABLE=[Filename of the variable file including extension]
WORKSPACE=[Name of the default workspace]

Для решения проблемы непередачи аргументов вы можете добавить это к своему csproj:

<PropertyGroup>
   <DockerDebuggeeArguments>touch test.txt</DockerDebuggeeArguments>
   ...
   ...
</PropertyGroup>

Найдено здесь: https://docs.microsoft.com/en-us/visualstudio/containers/container-msbuild-properties?view=vs-2019

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...