OSX中的docker容器中缺少Dotnet Antiforgery dll

时间:2017-01-04 19:44:36

标签: docker asp.net-core containers

我有这个想法,让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核心代码所需的内容。

1 个答案:

答案 0 :(得分:2)

当我运行dotnet restore(在我的Win机器上)时,我看到包被下载/复制到项目文件夹,而不是<userhome>/.nuget/packages/

因此,您的docker镜像仍然没有通过dotnet restore下载到主机的软件包(因为dotnet run仅编译应用程序本身,而不复制依赖项)。

你应该:

  1. 使用dotnet publish创建“可立即运行”的发布商,并在容器中运行;
  2. 或者,当您更改依赖项(每次)时,至少在docker image中运行dotnet restore;
  3. 或者,将主机系统中的包文件夹映射到docker。