【问题标题】:Is there any way to run a .NET Core App inside a Linux container?有没有办法在 Linux 容器中运行 .NET Core 应用程序?
【发布时间】: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


【解决方案1】:

行:

FROM microsoft/aspnetcore:1.0.13-nanoserver-sac2016 AS base  

正在加载 microsoft nanoserver 2016 作为基础映像。这是 Windows 服务器,而不是 linus 服务器。显然,生成的图像必须在 WIndows 内核上运行。

如果您想要 Linux 基础映像,请使用 Linux 基础映像。

有两个相关链接:

根本没有办法使平台 apltform 独立。由于 docker 不运行虚拟机,而是共享主操作系统的“超薄”虚拟化......映像的主操作系统必须匹配。

【讨论】:

  • 这不是很明显,因为我从“aspnetcore”获得了该图像,并且我再次认为它也是跨平台兼容的,但是当然..我明白你在说什么..任何替代品我可以用吗?
  • 其实是这样。有一个官方的 docker 镜像(microsoft/aspnetcore),如果您不屑于查看该网站,那里有文档。 hub.docker.com/r/microsoft/aspnetcore。那个地方有官方的 Linux 镜像。没有跨平台操作系统映像。这不是 dotnetcore 问题 - 图像基于运行时,并且您明确加载 Windows 运行时,而不是 linux 运行时(它将使用 1.0.13-Jessie 图像作为 linux 基本操作系统)。您的问题是您需要一个不能独立于平台(因为它是平台)的操作系统(高于 dotnetcore)并且您使用的是 Windows。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多