Visual Studio 2017 何时、何地以及如何设置 DOCKER_BUILD_SOURCE 环境变量

Posted

技术标签:

【中文标题】Visual Studio 2017 何时、何地以及如何设置 DOCKER_BUILD_SOURCE 环境变量【英文标题】:When, where and how does Visual Studio 2017 set the DOCKER_BUILD_SOURCE environment variable 【发布时间】:2017-08-06 17:45:37 【问题描述】:

在 Visual Studio 2017 中创建具有 docker 支持的新 .NET 核心应用程序时,它会创建许多 docker-compose.yml 文件。 docker-compose.vs.debug.yml 和发布变体都包含对名为 DOCKER_BUILD_SOURCE 的环境变量的引用:

version: '2'

services:
  app:
    image: app:dev
    build:
      args:
        source: $DOCKER_BUILD_SOURCE
    environment:
      - DOTNET_USE_POLLING_FILE_WATCHER=1
    volumes:
      - ./app:/app
      - ~/.nuget/packages:/root/.nuget/packages:ro
      - ~/clrdbg:/clrdbg:ro
    entrypoint: tail -f /dev/null
    labels:
      - "com.microsoft.visualstudio.targetoperatingsystem=linux"

The purpose of this variable seems to be a reference to the source directory, however, it always seems to be empty.

我无法找到有关此主题的更详细信息...有没有人有想法或指向某些文档的指针?

【问题讨论】:

在 VS2017 更新停止设置该值之前,我的 docker 构建工作正常。 【参考方案1】:

我认为这与进行一些可用于 Visual Studio Team Services CI/CD 的设置有关。但是,当在本地运行时,该值是空的,如果您查看 docker 文件,您会看到如果该值为空,它将替换为“obj/Docker/publish”

Dockerfile:

来自 microsoft/aspnetcore:1.0

ARG来源

WORKDIR /app

曝光 80

复制 $source:-obj/Docker/publish .

入口点 ["dotnet", "app.dll"]

但对我来说,我实际上并没有看到该文件夹​​或其中的任何内容。 “魔法”发生的地方是卷部分。这实际上将您的代码作为bind mound 移动到容器上。这是您的代码被移动到容器上的地方。还有一些我不清楚的其他事情发生了,因为我在构建输出中看到了代码被构建/发布的一行,但不是正在运行的实际命令。

【讨论】:

【参考方案2】:

这对构建开发映像没有实际影响。正如 Nick 解释的那样,我们使用绑定挂载获取代码。

这在使用文件docker-compose.ci.build.yml 构建用于生产的映像时使用,该文件输出到每个解决方案 Web 项目的 obj/Docker/publish。

【讨论】:

以上是关于Visual Studio 2017 何时、何地以及如何设置 DOCKER_BUILD_SOURCE 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

如何查看greenplum函数何时、何人、何地在数据库中创建的信息?

何时何地为 caffe 调用和执行“REGISTER_SOLVER_CLASS(SGD);”?

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

错误 MSB3073:命令“grunt dist”在 Visual Studio 2017 中以代码 3 退出

更新 Visual Studio 2017,现在出现编译错误 C7510:“回调”:使用依赖模板名称必须以“模板”为前缀