ASP.NET Core docker 构建错误

Posted

技术标签:

【中文标题】ASP.NET Core docker 构建错误【英文标题】:ASP.NET Core docker build error 【发布时间】:2018-03-28 12:59:14 【问题描述】:

我是 ASP.NET Core 和 docker 的新手。 我创建了一个简单的 ASP.NET Core 2.0 应用程序并尝试在 Windows 上使用 docker。但是,我收到此错误:

Your Docker server host is configured for 'Linux', however the docker-compose project targets 'Windows'.

虽然这似乎是一个信息量很大的错误,但我找不到“为 Windows 配置主机”的位置

【问题讨论】:

【参考方案1】:

这是docker-compose.dcproj 文件,您可以在其中设置要定位的操作系统:

<DockerTargetOS>Linux</DockerTargetOS>

要将 docker 守护进程切换到相同的操作系统,您可以使用 Docker 托盘图标或 Docker 设置窗口(可从同一菜单访问):

【讨论】:

我遇到了同样的错误,但我实际上想针对 Linux,而不是 Windows。这种情况的解决办法是什么? @AnthonyGatlin 你只需要在两个地方都有相同的操作系统:你的 docker-compose 项目和你的 Docker 机器。检查哪个不正确并修复它。我从未使用过 Windows 容器,但我想它会类似于 docker 托盘菜单中的 Switch back to normal Linux containers 我很确定不需要在同一个操作系统下运行。我正在 Windows 上开发,但将部署到 Linux。实际上,我可以通过 Docker for Windows 创建和管理的 VM 无缝访问 Linux 容器。在我的 Visual Studio 项目中重新启动和重新创建我的 docker 文件后,我的错误神奇地消失了。我正在我的 Windows 机器下再次部署到 Linux 容器。 您可以编辑 .csproj 文件并更改 Linux 并保存。它会起作用的。 除非很明显,否则您还应该通过右键单击选择 add &gt; orchestrations &gt; docker-compose 为您的项目添加编排我们现在可以设置目标操作系统【参考方案2】:

当我将项目创建为面向 Windows 并且后来想将其切换为面向 Linux 时,我遇到了这个错误。如果您想改用 Linux 容器,这些步骤会稍微复杂一些:

    卸载 docker-compose,将 DockerTargetOS 编辑到 Linux,然后重新加载项目 转到 docker-compose.yml。确保反斜杠是正斜杠。应该看起来像“WebApplication/Dockerfile”

    在 Dockerfile 中,基本使用“microsoft/aspnetcore:2.0”,构建使用“microsoft/aspnetcore-build:2.0”,因此应该如下所示:

    FROM microsoft/aspnetcore:2.0 AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM microsoft/aspnetcore-build:2.0 AS build
    WORKDIR /src
    COPY WebApplication7/WebApplication.csproj WebApplication/
    RUN dotnet restore WebApplication/WebApplication.csproj
    COPY . .
    WORKDIR /src/WebApplication
    RUN dotnet build WebApplication.csproj -c Release -o /app
    

    右键单击 Docker 托盘图标 > 设置 > 共享驱动器 > 选择项目所在的驱动器。

【讨论】:

【参考方案3】:

启用 docker 支持时确保选择正确的操作系统:

您的 docker 守护程序也必须以 Linux 容器为目标。

【讨论】:

来自评论:这并不能真正回答问题,它看起来更像是评论。 @toti08 相信我,这正是 OP 想要的。我昨天遇到了同样的问题,这让我解决了。 @VishvaDave 这只是一个我已内联的图像的链接。答案很好。 @Nick Ohh 对不起,我正在做论坛评论,我认为这是答案的链接。 @VishvaDave 我也是从审查中做到的。我已将其标记为 OK,所以应该取消您的删除投票...【参考方案4】:

Celestin Bochis 和 Pavel Agarkov 的回答基本上都很棒。但是,至少从 .net core 2.2 开始,docker 的操作系统存储在 .csproj 文件中。

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    ...
   </PropertyGroup>

   ...
</Project>

别忘了修改你的 docker 文件。图片应该是正确的。对于 .net core 2.2 即:

Linux:
Microsoft/dotnet:2.2-aspnetcore-runtime AS base
microsoft/dotnet:2.2-sdk AS build

Windows:
microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-1803
microsoft/dotnet:2.2-sdk-nanoserver-1803

【讨论】:

这正是我想要的,谢谢! 我的 docker compose 设置为 Linux,但问题是即使我在创建核心 Web 应用程序时选择 Linux 作为目标操作系统,Visual Studio 仍然将 Wndows 作为 CS 项目中的默认目标操作系统。 【参考方案5】:

如果 docker 在 windows 机器上运行,那么你需要在 .dcproj 文件中将“DockerTargetOS”的值改为“Windows”。

从 Visual Studio 中卸载 docker 项目并编辑项目并将值“Windows”设置为“DockerTargetOS”。

<DockerTargetOS>Windows</DockerTargetOS>

【讨论】:

我在 .csproj 中找到了 Windows 并且它工作正常。当我从 Windows 更改为 Linux 时,我的容器配置为 linux。 项目的卸载/重新加载对我有用!我将它设置为 Linux,并且 dockerfile 和项目文件都正确设置为 Linux,但是即使 Docker 在 Linux 模式下运行,我仍然收到有关未找到目标操作系统的错误。我卸载了项目并重新加载它,现在它工作正常!

以上是关于ASP.NET Core docker 构建错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 Angular Web App 在 Windows 上构建和运行,但在 Mac OSX 和 Docker 上失败

ASP.Net Core:突然出现数百个构建错误

构建时的ASP.NET Core错误 - 缺少一个或多个编译引用

ASP.Net Core - 从 Razor 视图调用静态方法 - 构建失败而不给出错误

增加在 Azure 上运行的 Dockerized ASP.NET Core 站点的最大上传大小限制?

使用 .NET 4.6 和 ASP.NET Core 的 TFS 2017 构建定义