我已经使用Visual Studio 2017(在Windows上)创建了.Net Core App
,并试图在docker容器中运行它。基于他们的website ,. NET Core Apps应该允许我们的开发人员创建跨平台兼容的软件;
.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容器来运行它”。 但是现在我很困惑,因为我的控制台应用程序和都应该是跨平台兼容的,对吗?还是我错过了什么?
答案 0 :(得分:2)
该行:
FROM microsoft/aspnetcore:1.0.13-nanoserver-sac2016 AS base
正在加载Microsoft nanoserver 2016作为基本映像。这是Windows服务器,而不是Linus服务器。显然,生成的图像必须在Windows内核上运行。
如果需要Linux基本映像,请使用Linux基本映像。
有两个相关链接:
正如您所说,您使用的是官方存储库。好吧,它在https://hub.docker.com/r/microsoft/aspnetcore/有一个网站,列出了所有图像,Windows和Linux。
https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images上有关于如何构建基础映像的文档,该文档也详细讨论了该主题(请参见Linux)。
根本没有办法使平台apltform独立。由于docker不运行VM,而是共享主操作系统的“苗条”虚拟化。...映像的主操作系统必须匹配。