将ASP.Net应用程序部署到Window Server核心容器

时间:2018-01-19 20:03:27

标签: asp.net powershell docker visual-studio-2017 windows-container

我遇到了使用旧版asp.net Web应用程序手动构建和运行Windows服务器核心容器的问题。从Visual Studio,我可以使用自动生成的dockerfile / yml文件运行容器。

我想使用dockerfile而不是Visual Studio执行docker build和docker run powershell命令。

这是当前的yml文件:

version: '3'

services:

  fulldotnetwebapplication:

    image: fulldotnetwebapplication

    build:

      context: .\FullDotNetWebApplication

      dockerfile: Dockerfile

这是当前的dockerfile:

FROM microsoft/aspnet:4.7.1-windowsservercore-ltsc2016

ARG source

WORKDIR /inetpub/wwwroot

COPY ${source:-obj/Docker/publish} .

我们说我的ASP项目是FullDotNetWebApplication,它包含App_Data,内容,控制器等文件夹以及Master / ASPX页面以及web / packages / config。

我为我的Dockerfile尝试了这个:

FROM microsoft/aspnet:4.7.1-windowsservercore-ltsc2016

WORKDIR /inetpub/wwwroot

COPY . . 

COPY ./bin ./bin

我收到此错误:

docker : COPY failed: GetFileAttributesEx \\?\C:\Windows\TEMP\docker-builder977521850\bin: The system cannot find the file specified.
At line:1 char:1
+ docker build -t fulldotnetwebapplication .
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (COPY failed: Ge...file specified.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

我的docker文件应该如何从Powershell将此应用程序部署到IIS?我不明白魔法VS正在做些什么来使这项工作?是构建应用程序还是生成某种部署文件?我可以指出的任何例子或示例Dockerfile都会很棒。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

${source:-obj/Docker/publish}

这就是为什么你可以在VS中运行它而不是从PowerShell / CMD运行它,VS注入该路径的源部分,将其映射到当前项目的特殊docker发布文件夹。

如果用. .代替,那意味着从我当前的执行目录(通常与dockerfile位置相同,如果你没有手动指定文件)复制一切到工作目录中容器。因此,您的尝试COPY ./bin ./bin是不必要的,因为正在进行的COPY . .已经复制了该目录(假设它确实存在)

  

是构建应用程序还是正在生成某种部署文件?

容器是部署单元,您无法将容器部署到IIS,它必须在容器主机上运行。 Docker也不会构建你的解决方案,在构建容器之前你应该构建你的解决方案,然后只复制所需的输出(这是VS源路径试图做的)。

可以让您的容器工作流也使用多阶段容器构建您的解决方案,您可以使用安装了VS的容器来构建项目,然后将输出复制到另一个容器以运行它,但是是一个相当高级的设置,如果你甚至无法正常构建复制工作,我不建议。