我有这个想法,让docker容器挂载一个文件夹,其中有一个已编译的Aspnet核心1.1应用程序。
当我这样做时,文件丢失了。制作它的最佳方法是什么......不要错过?
如何重新创建问题:
在我的OSX主机中,我创建了一个文件夹/myrootedpath/TheApp
和
dotnet new -t web
dotnet restore
dotnet run
创建并启动我的hello world web app
(我可curl localhost
因此我知道它在主持人中有用。)
我用ctrl-c停止服务器。
然后我创建了一个容器,它安装了所提到的文件夹,通过
编译并启动了Web服务器docker run -p 80:80 -ti \
-v /myrootedpath/TheApp:/theapp microsoft/dotnet \
/bin/bash -c 'cd /theapp; dotnet run'
但它以
停止项目theapp(.NETCoreApp,Version = v1.1)之前已编译过。跳过编译。
错误:未找到依赖项清单中指定的程序集 - package:'Microsoft.AspNetCore.Antiforgery',version:'1.0.1',path:'lib / netstandard1.3 / Microsoft.AspNetCore.Antiforgery的.dll'
我看到Antiforgery.dll
丢失了
我想我可以找到并复制它并创建一个新图像
这是推荐的解决方案吗?
更新
当我开始赏金时,我想澄清一下,问题归结为执行在容器外编译的dotnet核心代码所需的内容。
答案 0 :(得分:2)
当我运行dotnet restore
(在我的Win机器上)时,我看到包被下载/复制到项目文件夹,而不是<userhome>/.nuget/packages/
。
因此,您的docker镜像仍然没有通过dotnet restore
下载到主机的软件包(因为dotnet run
仅编译应用程序本身,而不复制依赖项)。
你应该:
dotnet publish
创建“可立即运行”的发布商,并在容器中运行; dotnet restore
;