【发布时间】:2019-03-28 20:29:52
【问题描述】:
我使用 Visual Studio 2017(在 Windows 上)创建了我的 .Net Core App,并尝试在 docker 容器中运行它。基于他们的website .NET Core 应用程序应该允许我们开发人员创建跨平台兼容的软件;
.NET Core 是 .NET 的跨平台版本,用于构建网站, 服务和控制台应用程序。
我的尝试是创建一个 .NET Core 控制台应用程序;
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"]
.. 但是我似乎总是收到以下错误消息;
image operating system "windows" cannot be used on this platform
.. 我将其解释为“您应该使用 Windows 容器来运行它”。 但是现在我很困惑,因为我的控制台应用程序和我的容器都应该是跨平台兼容的,对吧?还是我错过了什么?
【问题讨论】:
-
嗯,您选择使用 Windows 服务器映像作为基础映像,而不是您所要求的。
-
某种答案。您将其发布到 Windows,因此它必须在 Windows 上运行。核心有很多操作系统,您可以将其发布到。为什么使用 microsoft nanoserver(小型 windows 服务器)作为基础镜像?
-
@TomTom 我考虑过使用那个 Microsoft Nanoserver 映像,因为我目前想不出任何其他苗条的基础映像来运行我的应用程序。但是,我很高兴听到任何替代图像!
-
hub.docker.com/r/microsoft/aspnetcore - 使用 Linux 映像 ;) 操作系统可以根据定义不独立于平台。它是平台。 Docker 不是虚拟机——因此它必须使用正确的内核来实现超薄虚拟化。有关详细信息,请阅读docs.microsoft.com/en-us/dotnet/core/docker/…
-
是的,我已经阅读了您的答案并将其标记为已接受。谢谢。如果有任何方法仍然可以编辑您的答案,我将不胜感激包含替代方案的编辑。 ( :
标签: c# .net docker linux-containers