我正在尝试构建一个.NET核心应用程序停靠器镜像。但我不知道该如何将项目的NuGet依赖项添加到映像中。
为了简单起见,我创建了一个.NET核心控制台应用程序:
using System;
using Newtonsoft.Json;
namespace ConsoleCoreTestApp
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine($"Hello World: {JsonConvert.False}");
}
}
}它在Newtonsoft.Json上只有一个NuGet依赖项。当我在Visual Studio中运行该应用程序时,一切工作正常。
但是,当我从项目创建Docker镜像并尝试从那里执行应用程序时,它找不到依赖项:
# dotnet ConsoleCoreTestApp.dll
Error: assembly specified in the dependencies manifest was not found -- package: 'Newtonsoft.Json', version: '9.0.1', path: 'lib/netstandard1.0/Newtonsoft.Json.dll'这是意料之中的,因为Visual Studio不会将Newtonsoft.Json.dll复制到输出文件夹。
下面是我使用的Dockerfile:
FROM microsoft/dotnet:1.0.0-core
COPY bin/Debug /app有没有解决这个问题的推荐方法?
我不想在容器内部运行dotnet restore (因为我不想在每次容器运行时重新下载所有依赖项)。
我想我可以在Dockerfile中添加一个RUN dotnet restore条目,但是我不能再使用microsoft/dotnet:<version>-core作为基础镜像了。
我也找不到让Visual Studio将所有依赖项复制到输出文件夹中的方法(就像它对常规.NET框架项目所做的那样)。
发布于 2016-08-06 21:04:50
又读了一遍,我终于明白了。
而不是dotnet build,你可以运行:
dotnet publish这将把所有文件(包括依赖项)放在一个publish文件夹中。然后,该文件夹可以直接用于microsoft/dotnet:<version>-core图像。
发布于 2016-08-06 10:03:19
我最近写了一篇关于这个的tutorial。我使用的ASP.NET文件内容是(稍微修改一下,去掉Dockerfile核心部分):
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
ENTRYPOINT ["dotnet", "run"]当你运行docker build时,它使用Dockerfile文件作为构建镜像的“秘诀”。它将首先运行dotnet restore和dotnet build,然后将所有内容打包到映像中。生成的图像包含了该应用程序在任何Docker主机上运行所需的所有内容。
https://stackoverflow.com/questions/38796439
复制相似问题