Asp.net 理解VS2017 webform应用程序的docker组合

Asp.net 理解VS2017 webform应用程序的docker组合,asp.net,docker,docker-compose,visual-studio-2017,Asp.net,Docker,Docker Compose,Visual Studio 2017,我正在创建一个Webform应用程序,并尝试将其容器化。 我使用VS2017,创建默认webform应用程序,并添加docker支持 如果我对应用程序进行F5处理,它将正常工作(希望如此) “添加docker支持”添加了许多文件: 1) Dockerfile,带有 FROM microsoft/aspnet:4.6.2 ARG source WORKDIR /inetpub/wwwroot COPY ${source:-obj/Docker/publish} . 我知道它是基于aspnet:4

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

如果我对应用程序进行F5处理,它将正常工作(希望如此)

“添加docker支持”添加了许多文件:

1) Dockerfile,带有

FROM microsoft/aspnet:4.6.2
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .
我知道它是基于aspnet:4.6.2图像的,它从obj/docker/publish复制文件以将其放入容器中

我的问题是我没有在此目录上发布任何文件。当然,如果我构建docker,我会有一个错误(在obj/docker/publish中找不到文件)。记住,使用F5时,它正在工作

但还有其他文件

2) Docker-compose.yml:

version: '3'

services:
  legacywebapp:
    image: legacywebapp
    build:
      context: .\LegacyWebApp
      dockerfile: Dockerfile
如果我理解的很好,它会基于dockerfile创建一个legacywebapp服务。一个不工作,仍然没有“obj/docker/publish”

3) docker-compose.override.yml具有:

version: '3'

services:
  legacywebapp:
    ports:
      - "80"
networks:
  default:
    external:
      name: nat
好的,我假设它公开了端口80(为什么不在第一个文件中?但是无论如何,对于模块化,我认为它更好)

如果我尝试

docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml build
当然我有一个错误:

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.
为什么我在VisualStudio中使用F5时它会工作?让我们看看VS的构建输出,我可以看到命令行:

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
我想还有另一个文件要调试:

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

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"
同样,没有obj/docker/publish。什么是obj/Docker/empty/


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

在您添加Docker支持后,如果您“F5应用程序”,您看到您的示例Web表单工作了吗?如果是,则表示您的Docker映像正在运行。检查Visual Studio生成输出。如果您试图从VisualStudio外部运行构建命令,它将不起作用,因为“Source”是VisualStudio在构建时传递的环境变量。