ASP.NET 核心 docker 构建错误

ASP.NET Core docker build error

我是 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'.

虽然这似乎是一个非常有用的错误,但我找不到 'configure host for Windows'

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

<DockerTargetOS>Linux</DockerTargetOS>

要将 docker 守护程序切换到相同的 OS,您可以使用 Docker 托盘图标或 Docker 设置 window(可从同一菜单访问) :

我在创建目标为 Windows 的项目时遇到此错误,后来想将其切换为目标为 Linux。如果您想改用 Linux 容器,这些步骤会稍微复杂一些:

  1. 卸载 docker-compose,将 DockerTargetOS 编辑为 Linux,然后重新加载项目
  2. 前往docker-compose.yml。确保反斜杠是正斜杠。应该看起来像 "WebApplication/Dockerfile"
  3. 在 Docker 文件中,基础使用 "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 托盘图标 > 设置 > 共享驱动器 > 选择项目所在的驱动器。

确保在启用 docker 支持时选择正确的 OS:

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

基本上 Celestin Bochis 和 Pavel Agarkov 的回答都很棒。但是,至少从 .net core 2.2 开始,docker 的 os 存储在 .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 在 windows 机器上是 运行 那么您需要在 .dcproj 文件中更改 "DockerTargetOS" 的值应该是 "Windows" .

从 visual studio 卸载 docker 项目并编辑项目并将值 "Windows" 设置为 "DockerTargetOS"。

<DockerTargetOS>Windows</DockerTargetOS>