了解VS2017 webform应用程序的docker-compose

时间:2017-10-03 08:53:36

标签: asp.net docker docker-compose visual-studio-2017

我正在创建一个我试图容器化的Webform应用程序。 我使用VS2017,创建默认的webform应用程序,并添加docker支持。

如果我F5该应用程序,它正在工作(希望)

“添加泊坞窗支持”会添加许多文件:

1)一个Dockerfile,带

version: '3'

services:
  legacywebapp:
    image: legacywebapp
    build:
      context: .\LegacyWebApp
      dockerfile: Dockerfile

我理解它基于aspnet:4.6.2图像,并且它从obj / docker / publish复制文件以将它们放入容器中。

我的问题是我没有在此目录上发布文件。当然,如果我建立了docker,我有一个错误(它无法在obj / docker / publish中找到文件)。请记住,F5正在运行。

但是还有其他文件。

2)Docker-compose.yml:

version: '3'

services:
  legacywebapp:
    ports:
      - "80"
networks:
  default:
    external:
      name: nat

如果我理解的话,它会根据dockerfile创建一个legacywebapp服务。那个没有用的,仍然没有“obj / docker / publish”

3)docker-compose.override.yml with:

docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml build

好吧,我认为它暴露了端口80(为什么不在第一个文件中?但无论如何,对于模块化,我认为它更好。)

如果我尝试

Step 4/4 : COPY ${source:-obj/Docker/publish} .
ERROR: Service 'legacywebapp' failed to build: COPY failed: GetFileAttributesEx \\?\C:\windows\TEMP\docker-builder798755009\obj\Docker\publish: The system cannot find the file specified.

当然我有一个错误:

docker-compose -f "C:\Users\...\docker-compose.yml" -f "C:\Users\...\docker-compose.override.yml" -f "C:\Users\...\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15539612722162891187 up -d --build

为什么我在Visual Studio中使用F5时会有效?让我们看一下VS的构建输出,我可以看到命令行:

version: '3'

services:
  legacywebapp:
    image: legacywebapp:dev
    build:
      args:
        source: obj/Docker/empty/
    volumes:
      - C:\Users\...\LegacyWebApp:C:\inetpub\wwwroot
      - C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger:C:\remote_debugger:ro
    labels:
      com.microsoft.visualstudio.debuggee.program: "C:\\app\\bin/LegacyWebApp.dll"
      com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\app"

所以,还有另一个文件,我想调试一下:

4)docker-compose.vs.debug.g.yml

// Return object like {"value": 10, "rest": {"value": 20, "rest": null}}

function arrayToList0(arr) {
  var entry = {};
  // Check if there are any members in arr
  if (arr.length) {
    // If there are, add the value
    entry.value = arr[0];
  }
  
  // If there are more entries, add them
  if (arr.length > 1) {
    // Call recursively without first element
    entry.rest = arrayToList(arr.slice(1));
    
  // Otherwise, add null
  } else {
    entry.rest = null;
  }
  return entry;
}

console.log(arrayToList([1,2,3]));

再一次,没有obj / docker / publish。什么是obj / Docker / empty /?

如何正确构建图像?例如,如果我想将它发布在私有存储库中......

0 个答案:

没有答案