Есть ли способ запустить приложение .NET Core внутри контейнера Linux?

Я использовал Visual Studio 2017 (в Windows) для создания своего .Net Core App и пытаюсь запустить его внутри док-контейнера. Основываясь на их веб-сайте, приложения .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-контейнер для запуска этого». Но теперь я в замешательстве, поскольку и мое консольное приложение, и мой контейнер должны быть кросс-платформенными, верно? Или я что-то упускаю?


person TheRealVira    schedule 24.10.2018    source источник
comment
Что ж, вы решили использовать образ сервера Windows в качестве базового образа, тогда вы получите то, что просите.   -  person Peter Bons    schedule 24.10.2018
comment
Вроде отвечает на него. Вы как бы опубликовали его в Windows, поэтому он должен работать в Windows. У ядра есть МНОГО ОС, в которые вы можете его опубликовать. Почему вы используете наносервер Microsoft (сервер с маленькими окнами) в качестве базового образа?   -  person TomTom    schedule 24.10.2018
comment
@TomTom Я думал об использовании этого образа Microsoft Nanoserver, так как в настоящее время я не могу придумать никаких других тонких базовых образов для запуска моего приложения. Однако я был бы очень рад услышать о любом альтернативном изображении!   -  person TheRealVira    schedule 24.10.2018
comment
hub.docker.com/r/microsoft/aspnetcore — используйте образ Linux; ) По определению ОС не может быть независимой от платформы. Это платформа. Docker не является виртуальной машиной, поэтому он ДОЛЖЕН использовать правильное ядро ​​для тонкой виртуализации. Более подробные сведения см. на странице docs.microsoft.com. /en-us/dotnet/core/docker/   -  person TomTom    schedule 24.10.2018
comment
Да, я уже прочитал ваш ответ и отметил его как принятый. Спасибо. Если есть какой-либо способ отредактировать ваш ответ, я был бы признателен за редактирование, содержащее альтернативы. ( :   -  person TheRealVira    schedule 24.10.2018
comment
Добавлены ссылки и ссылки на ответ. Вы правы, может не только у вас такая проблема.   -  person TomTom    schedule 24.10.2018


Ответы (1)


Линия:

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

загружает microsoft nanoserver 2016 в качестве базового образа. Это Windows-сервер, а не Linux-сервер. ОЧЕВИДНО полученный образ должен работать на ядре WIndows.

Используйте базовый образ Linux, если вам нужен базовый образ Linux.

Есть две релевантные ссылки:

Просто невозможно сделать платформу независимой от aptform. Поскольку докер запускает не виртуальную машину, а «тонкую» виртуализацию, разделяющую основную ОС... основная ОС образа ДОЛЖНА совпадать.

person TomTom    schedule 24.10.2018
comment
Это не так очевидно, так как я получил этот образ от aspnetcore, и я снова подумал, что он будет также кросс-платформенным, но уверен ... Я понимаю, что вы говорите ... Какие альтернативы я мог бы использовать? - person TheRealVira; 24.10.2018
comment
На самом деле это так. Существует официальный образ докера (microsoft/aspnetcore), и если вы потрудитесь посмотреть на веб-сайте, там есть документация. hub.docker.com/r/microsoft/aspnetcore. Там есть официальные образы Linux. Кроссплатформенного образа ОС нет. Это не проблема dotnetcore - образ основан на среде выполнения, и вы явно загружаете среду выполнения Windows, а не среду Linux (которая будет использовать образ 1.0.13-Jessie для базовой ОС Linux). Ваша проблема в том, что вам нужна ОС (выше dotnetcore), которая не может быть платформенно-независимой (так как это платформа), и вы использовали Windows. - person TomTom; 24.10.2018