将 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://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 的容器来构建项目,然后将输出复制到另一个容器 运行 宁它,但这是一个相当高级的设置,如果你甚至不能让正常的构建复制工作,我不会推荐。
我在使用遗留 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://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 的容器来构建项目,然后将输出复制到另一个容器 运行 宁它,但这是一个相当高级的设置,如果你甚至不能让正常的构建复制工作,我不会推荐。