C# 有没有办法在Linux容器中运行.NET核心应用程序?
我使用Visual Studio 2017(在Windows上)创建了我的C# 有没有办法在Linux容器中运行.NET核心应用程序?,c#,.net,docker,linux-containers,C#,.net,Docker,Linux Containers,我使用Visual Studio 2017(在Windows上)创建了我的.Net Core应用程序,并尝试在docker容器中运行它。基于.NET核心应用程序,美国开发者可以创建跨平台兼容的软件 .NET Core是用于构建网站的.NET的跨平台版本, 服务和控制台应用程序 我的尝试是创建一个.NET核心控制台应用程序 using System; using Newtonsoft.Json; namespace Services { class Program {
.Net Core应用程序
,并尝试在docker容器中运行它。基于.NET核心应用程序,美国开发者可以创建跨平台兼容的软件
.NET Core是用于构建网站的.NET的跨平台版本,
服务和控制台应用程序
我的尝试是创建一个.NET核心控制台应用程序
using System;
using Newtonsoft.Json;
namespace Services
{
class Program
{
static void Main(string[] args)
{
if (Enum.TryParse(
typeof(LoremIpsumGenerator.TypeOfGenerator),
args[0],
true,
out var testParse))
{
Console.WriteLine(
JsonConvert.SerializeObject(
LoremIpsumGenerator
.GenerateText(
int.Parse(args[1]),
(LoremIpsumGenerator.TypeOfGenerator) testParse)));
}
Console.WriteLine("Wrong Parameters!");
}
}
}
通过dotnet Publish发布它
,并通过以下方式运行它:
FROM microsoft/aspnetcore:1.0.13-nanoserver-sac2016 AS base
WORKDIR /Services
COPY /bin/Debug/netcoreapp2.0/publish/ .
ENTRYPOINT ["dotnet", "DockerConsoleTestApp.dll"]
。。然而,我似乎总是得到以下错误信息
无法在此平台上使用映像操作系统“windows”
。。我将其解释为“您应该使用Windows容器来运行它”但是现在我很困惑,因为我的控制台应用程序和容器都应该是跨平台兼容的,对吗?还是我遗漏了什么?行:
FROM microsoft/aspnetcore:1.0.13-nanoserver-sac2016 AS base
正在加载microsoft nanoserver 2016作为基本映像。这是windows服务器,不是linus服务器。显然,生成的映像必须在WIndows内核上运行
如果需要Linux基本映像,请使用Linux基本映像
有两个相关链接:
- 正如您所说,您使用了一个官方存储库。嗯,它有一个网站,列出了所有的图像,windows和linux
- 在中有关于如何构建基本映像的文档,也详细介绍了本主题(查找Linux)
FROM microsoft/aspnetcore:1.0.13-nanoserver-sac2016 AS base
正在加载microsoft nanoserver 2016作为基本映像。这是windows服务器,不是linus服务器。显然,生成的映像必须在WIndows内核上运行
如果需要Linux基本映像,请使用Linux基本映像
有两个相关链接:
- 正如您所说,您使用了一个官方存储库。嗯,它有一个网站,列出了所有的图像,windows和linux
- 在中有关于如何构建基本映像的文档,也详细介绍了本主题(查找Linux)
根本没有办法使平台apltform独立。因为docker不运行虚拟机,而是共享主操作系统的“超薄”虚拟化。。。。映像的主操作系统必须匹配。嗯,您选择使用windows server映像作为基本映像,这样您就可以得到您所要求的。某种程度上可以回答这个问题。您将其发布到windows,因此它必须在windows上运行。core有很多可以发布到的操作系统。为什么要使用microsoft nanoserver(小型windows服务器)作为基本映像?@TomTom我考虑过使用该microsoft nanoserver映像,因为我目前想不出任何其他苗条的基本映像来运行我的应用程序。然而,我很高兴听到任何其他的图像使用Linux映像;)根据定义,操作系统不能独立于平台。这是平台。Docker不是VM,因此它必须使用正确的内核来实现slim虚拟化。对于深入的细节,请阅读是的,我已经阅读了您的答案,并将其标记为已接受。谢谢。如果有任何方法仍然编辑您的答案,我将非常感谢包含备选方案的编辑。(:嗯,您选择使用windows服务器映像作为基础映像,这样您就可以得到您想要的。您可以回答它。您可以将它发布到windows,因此它必须在windows上运行。core有很多操作系统可以发布它。为什么要使用microsoft nanoserver(小型windows服务器)作为基本映像?@TomTom我曾考虑过使用Microsoft Nanoserver映像,因为我目前想不出任何其他苗条的基本映像来运行我的应用程序。不过,我很高兴听到任何替代映像!-使用Linux映像;)操作系统可以根据定义独立于平台。这是平台。Docker不是VM,因此它必须使用正确的内核来实现slim虚拟化。对于深入的细节,请阅读是的,我已经阅读了您的答案,并将其标记为已接受。谢谢。如果有任何方法仍然编辑您的答案,我将非常感谢包含备选方案的编辑。(:这不是很明显,因为我从“aspnetcore”中获得了该图像,我再次认为它也可以跨平台兼容,但肯定..我明白你的意思..我可以使用任何替代方案吗?事实上是。有一个正式的docker图像(microsoft/aspnetcore)如果你费心看网站,那里有文档。那里有正式的Linux映像。没有跨平台的操作系统映像。这不是dotnetcore的问题-映像基于运行时,你可以明确地加载windows运行时,而不是Linux运行时(Linux基本操作系统将使用1.0.13-Jessie映像)。你的问题是,你需要一个操作系统(在dotnetcore之上),它不能独立于平台(因为它是平台),你使用的是Windows。这不是很明显,因为我从“aspnetcore”得到了这个图像我再次认为它也可以跨平台兼容,但我明白你的意思。我可以使用任何替代方案吗?实际上是。有一个正式的docker映像(microsoft/aspnetcore)如果你费心看网站,那里有文档。那里有正式的Linux映像。没有跨平台的操作系统映像。这不是dotnetcore的问题-映像基于运行时,你可以明确地加载windows运行时,而不是Linux运行时(Linux基本操作系统将使用1.0.13-Jessie映像)。您的问题是您需要一个不能独立于平台(因为它是平台)的操作系统(高于dotnetcore),并且您使用的是Windows。