首页 > 解决方案 > Visual Studio 中的 ASP.Net 核心自定义 docker 卷挂载

问题描述

最初我使用的是Visual Studio 2017 Tools for Docker,因为这是在早期版本的 Visual Studio 中将 docker 支持添加到 ASP.NET 时的默认设置。

最近我升级到 Visual Studio 2017 15.8.0 Preview 2,我注意到有一种全新的方式来使用launchSettings.json.

旧方式有一个特殊*.dcproj的 whos 项目的 SDK 属性指向<Project Sdk="Microsoft.NET.Sdk.Web">. 在这个项目中,有一个docker-compose.yml和一个docker-compose.override.yml指向我的 ASP.Net 的Dockerfile. 这非常灵活,让我可以进行大量自定义,例如添加卷安装,如下所示。

docker-compose.override.yml:

version: '3.5'
services:
  sample.container:
    volumes:
    - type: bind
      source: C:\config
      target: /config
      read_only: true
      volume:
        nocopy: true

这很棒,因为它允许我在调试期间轻松指向不在容器中的配置文件。

现在使用 Visual Studio 中的新 docker 工具,launchSettings.json并且<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="0.2.1686908" />*.csproj文件中不再使用 compose 文件,它Dockerfile直接启动。下面是我的副本launchSettings.json

我真的希望有人能告诉我如何以这种新方式将自定义卷挂载添加到launchSettings.json文件中,请参阅Docker下面的部分。

launchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:55836",
      "sslPort": 44354
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication1": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    },
    "Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://localhost:{ServicePort}"
    }
  }
}

我还想说我已经寻找这个问题的解决方案几个小时了,但我无法找到有关该主题的任何信息。

标签: visual-studiodockerasp.net-core

解决方案


有几个 MSBuild 属性可用于增强 Docker 映像的构建/运行:

  • DockerfileBuildArguments:传递给 Docker 构建命令的附加参数。
  • DockerfileRunArguments:传递给 Docker 运行命令的附加参数。

例子:

<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <DockerfileRunArguments>-v "C:\HostFolder:/ContainerFolder:ro"</DockerfileRunArguments> </PropertyGroup> </Project>


推荐阅读