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

Deploy ASP.Net Application to Window Server Core Container

我在使用遗留 asp.net 网络应用程序手动构建和 运行 宁 windows 服务器核心容器时遇到问题。从 Visual Studio 我可以 运行 带有自动生成的 dockerfile/yml 文件的容器。

我想使用 docker 文件而不是 Visual Studio.[=16= 来执行 docker 构建和 docker 运行 powershell 命令]

这是当前的 yml 文件:

version: '3'

services:

  fulldotnetwebapplication:

    image: fulldotnetwebapplication

    build:

      context: .\FullDotNetWebApplication

      dockerfile: Dockerfile

这是当前的docker文件:

FROM microsoft/aspnet:4.7.1-windowsservercore-ltsc2016

ARG source

WORKDIR /inetpub/wwwroot

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

假设我的 ASP 项目是 FullDotNetWebApplication,它包含 App_Data、Content、Controllers 等文件夹以及 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 的示例都很棒。

这些可能会帮助您指明正确的方向:

https://blog.alexellis.io/run-iis-asp-net-on-windows-10-with-docker/

https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-images

https://www.red-gate.com/simple-talk/sysadmin/virtualization/working-windows-containers-docker-running/

https://sarafian.github.io/2017/02/14/docker-windows-full-asp.net-application.html

您需要在 Docker 文件中包含的第一件事是 [SHELL] 配置。还可以查看 Docker PowerShell 命令

${source:-obj/Docker/publish}

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

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

Is it building the application or some sort of deployment file being generated?

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

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