Поддержка Visual Studio Docker - отладка с помощью Dockerfile вне папки запуска проекта - PullRequest
0 голосов
/ 02 июля 2019

У меня есть файл Docker для проекта .NET Core, который ссылается на некоторые библиотечные проекты в том же решении.

Учитывая, что Docker не позволяет копировать файлы из-за пределов родительского каталога ( Docker:добавив файл из родительского каталога ), я должен держать свой Dockerfile вне каталога исполняемого (запускаемого) проекта.

Итак, как мне использовать отладку Visual Studio с Dockerfile, который не находится в исполняемом проекте?

Кажется, что Visual Studio работает только с отладкой Dockerпрофиль, если он может найти Dockerfile в каталоге для запуска проекта.

enter image description here

Когда Dockerfile отсутствует в каталоге запуска, ошибка сборкиуказывает на строки в файле Container.targets, расположенном по адресу:

C:\Users<user>\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.4.10\build

<Target Name="ContainerPrepareForLaunch" Condition="Exists('$(ContainerSemaphoreFilePath)')">
    <PrepareForLaunch DevelopmentMode="$(ContainerDevelopmentMode)"
                      DevEnvDir="$(DevEnvDir)"
                      Dockerfiles="@(_Dockerfile)" 
                      IntermediateOutputPath="$(ContainerIntermediateOutputPath)"
                      ProjectCapability="@(ProjectCapability)"
                      ProjectFilePath="$(MSBuildProjectFullPath)" 
                      NuGetPackageFolders="$(NuGetPackageFolders)"
                      NuGetPackageRoot="$(NuGetPackageRoot)"
                      TargetFrameworkWithVersion ="$(TargetFramework)"
                      TargetPath="$(TargetPath)"
                      ErrorLogFilePath="$(ContainerSemaphoreFilePath)"
                      DockerLabelBuiltImages="$(DockerLabelBuiltImages)"
                      DockerImageLabel="$(DockerImageLabel)" 
                      ProjectTypeGuids="$(ProjectTypeGuids)" />
  </Target>

Однако мне нужно иметь возможность управлять путем к Dockerfile для каждого проектаоснова.

1 Ответ

0 голосов
/ 03 июля 2019

Для Dockerfile вы можете получить доступ только к файлам в родительской папке. Для отладки Docker для VS он получит доступ к файлу docker в корневой папке проекта. Вы не могли изменить это поведение.

В качестве обходного пути вы можете подумать о добавлении docker-compose, который может указывать местоположение файла Dockerfile и запускаться из VS напрямую.

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите «Добавить»> «Поддержка контейнера-оркестратора».
  2. Выберите Docker Compose
  3. Измените docker-compose.yml, чтобы изменить путь к файлу докера в dockerfile переменная

    version: '3.4'
    
    services:
    hellodockertools:
        image: ${DOCKER_REGISTRY}hellodockertools
        build:
        context: .
        dockerfile: HelloDockerTools/Dockerfile
    
  4. Установить docker-compose в качестве запускаемого проекта

...