首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.NET核心应用docker镜像中包含依赖项?

如何在.NET核心应用docker镜像中包含依赖项?
EN

Stack Overflow用户
提问于 2016-08-06 03:20:49
回答 2查看 12.4K关注 0票数 12

我正在尝试构建一个.NET核心应用程序停靠器镜像。但我不知道该如何将项目的NuGet依赖项添加到映像中。

为了简单起见,我创建了一个.NET核心控制台应用程序:

代码语言:javascript
复制
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镜像并尝试从那里执行应用程序时,它找不到依赖项:

代码语言:javascript
复制
# 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

代码语言:javascript
复制
FROM microsoft/dotnet:1.0.0-core
COPY bin/Debug /app

有没有解决这个问题的推荐方法?

我不想在容器内部运行dotnet restore (因为我不想在每次容器运行时重新下载所有依赖项)。

我想我可以在Dockerfile中添加一个RUN dotnet restore条目,但是我不能再使用microsoft/dotnet:<version>-core作为基础镜像了。

我也找不到让Visual Studio将所有依赖项复制到输出文件夹中的方法(就像它对常规.NET框架项目所做的那样)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-06 21:04:50

又读了一遍,我终于明白了。

而不是dotnet build,你可以运行:

代码语言:javascript
复制
dotnet publish

这将把所有文件(包括依赖项)放在一个publish文件夹中。然后,该文件夹可以直接用于microsoft/dotnet:<version>-core图像。

票数 20
EN

Stack Overflow用户

发布于 2016-08-06 10:03:19

我最近写了一篇关于这个的tutorial。我使用的ASP.NET文件内容是(稍微修改一下,去掉Dockerfile核心部分):

代码语言:javascript
复制
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

ENTRYPOINT ["dotnet", "run"]

当你运行docker build时,它使用Dockerfile文件作为构建镜像的“秘诀”。它将首先运行dotnet restoredotnet build,然后将所有内容打包到映像中。生成的图像包含了该应用程序在任何Docker主机上运行所需的所有内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38796439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档