在OSX中的Docker容器中缺lessDotnet Antiforgery DLL
我有这样的想法,有一个docker容器挂载一个已经编译好的aspnet核心1.1应用程序的文件夹。
当我这样做的文件丢失。 什么是最好的方式,使其不失踪?
如何重新创build问题:
在我的OSX主机上,我创build一个文件夹/myrootedpath/TheApp
和
dotnet new -t web dotnet restore dotnet run
创build并启动我的Hello World应用
(我可以curl localhost
所以我知道它在主机中工作。)
我用ctrl-c停止服务器。
然后我创build一个容器来装载提到的文件夹,编译并启动Web服务器
docker run -p 80:80 -ti \ -v /myrootedpath/TheApp:/theapp microsoft/dotnet \ /bin/bash -c 'cd /theapp; dotnet run'
但它停止了
Project应用程序(.NETCoreApp,版本= v1.1)是以前编译的。 跳过编译。
错误:未find依赖项清单中指定的程序集 – 程序包:'Microsoft.AspNetCore.Antiforgery',版本:'1.0.1',path:'lib / netstandard1.3 / Microsoft.AspNetCore.Antiforgery.dll'
我看到Antiforgery.dll
丢失。
我想我可以find它并复制它并创build一个新的图像。
这是一个推荐的解决scheme?
UPDATE
当我开始赏金时,我想澄清一下,这个问题归结为执行在容器外部编译的dotnet核心代码需要什么。
当我运行dotnet restore
(在我的Win机器上),我发现软件包下载/复制不是项目文件夹,而是<userhome>/.nuget/packages/
。
所以,你的docker镜像仍然没有你通过dotnet restore
下载到你的主机上的包(因为dotnet run
只能编译app本身,而不需要复制依赖)。
你应该:
- 使用
dotnet publish
来创build“ready-to-run”distrib,并在容器中运行它; - 或者,在更改依赖关系(每次)时至less在Docker镜像中运行
dotnet restore
; - 或者,将主机系统中的packages文件夹映射到docker中。