Visual Studio Docker 支持 - 使用启动项目文件夹外的 Dockerfile 进行调试

gb2*_*b2d 3 visual-studio docker asp.net-core docker-for-windows

我有一个 .NET Core 项目的 docker 文件,该文件在同一解决方案中引用了一些库项目。

鉴于 Docker 不允许从父目录之外复制文件(Docker:从父目录添加文件),我必须将我的 Dockerfile 保留在可执行(启动)项目目录之外。

那么,如何将 Visual Studio 调试与不在可执行项目中的 Dockerfile 一起使用?

如果 Visual Studio 可以在启动项目的目录中找到 Dockerfile,它似乎只适用于 Docker 调试配置文件。

在此处输入图片说明

当启动目录中不存在 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>
Run Code Online (Sandbox Code Playgroud)

但是,我需要能够在每个项目的基础上管理 Dockerfile 的路径。

pik*_*usp 8

您可以DockerfileFile在项目文件中指定。可以在此处找到可用的公认属性列表

  • 这对我有用。VS 在与 csproj 文件相同的目录中创建了 Dockerfile。为了在我的 gitlab CI 管道中使用相同的文件而不更改它,我需要将其上移一个目录,以便它与解决方案文件位于同一目录中。将 `&lt;DockerfileFile&gt;..\Dockerfile&lt;/DockerfileFile&gt;` 添加到 `PropertyGroup` 为我解决了这个问题,所以现在我可以运行 dubugger (2认同)

Tao*_*hou -1

对于Dockerfile,您只能访问父文件夹中的文件。对于用于VS调试的Docker,它将访问项目根文件夹中的dockerfile。你无法改变这种行为。

对于解决方法,您可以考虑添加docker-compose可以指定 dockerfile 位置并直接从 VS 运行的内容。

  1. 在“解决方案资源管理器”中右键单击该项目,然后选择“添加”>“Container Orchestrator 支持”。
  2. 选择Docker Compose
  3. 修改以更改变量 docker-compose.yml中的dockerfilepathdockerfile

    version: '3.4'
    
    services:
    hellodockertools:
        image: ${DOCKER_REGISTRY}hellodockertools
        build:
        context: .
        dockerfile: HelloDockerTools/Dockerfile
    
    Run Code Online (Sandbox Code Playgroud)
  4. 设置docker-compose为启动项目