我遇到了使用旧版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都会很棒。
答案 0 :(得分:0)
这些可能有助于您指出正确的方向:
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命令
答案 1 :(得分:0)
${source:-obj/Docker/publish}
这就是为什么你可以在VS中运行它而不是从PowerShell / CMD运行它,VS注入该路径的源部分,将其映射到当前项目的特殊docker发布文件夹。
如果用. .
代替,那意味着从我当前的执行目录(通常与dockerfile位置相同,如果你没有手动指定文件)复制一切到工作目录中容器。因此,您的尝试COPY ./bin ./bin
是不必要的,因为正在进行的COPY . .
已经复制了该目录(假设它确实存在)
是构建应用程序还是正在生成某种部署文件?
容器是部署单元,您无法将容器部署到IIS,它必须在容器主机上运行。 Docker也不会构建你的解决方案,在构建容器之前你应该构建你的解决方案,然后只复制所需的输出(这是VS源路径试图做的)。
可以让您的容器工作流也使用多阶段容器构建您的解决方案,您可以使用安装了VS的容器来构建项目,然后将输出复制到另一个容器以运行它,但是是一个相当高级的设置,如果你甚至无法正常构建复制工作,我不建议。