【问题标题】:ASP.NET Core docker build errorASP.NET Core docker 构建错误
【发布时间】: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 配置主机”的位置

【问题讨论】:

    标签: c# docker asp.net-core docker-compose asp.net-core-2.0


    【解决方案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 容器,这些步骤会稍微复杂一些:

    1. 卸载 docker-compose,将 DockerTargetOS 编辑到 Linux,然后重新加载项目
    2. 转到 docker-compose.yml。确保反斜杠是正斜杠。应该看起来像“WebApplication/Dockerfile”
    3. 在 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
      
    4. 右键单击 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 模式下运行,我仍然收到有关未找到目标操作系统的错误。我卸载了项目并重新加载它,现在它工作正常!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2019-07-22
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      相关资源
      最近更新 更多