wake-up-neo.net

ASP.NET Core Docker-Build-Fehler

Ich bin neu in ASP.NET Core und Docker ... Ich habe eine einfache ASP.NET Core 2.0-App erstellt und versucht, Docker damit unter Windows zu verwenden. Ich erhalte jedoch diesen Fehler: 

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

Obwohl es ein ziemlich informativer Fehler zu sein scheint, kann ich nicht finden, wo 'Host für Windows' konfiguriert werden muss.

30
kagetoki

In dieser docker-compose.dcproj-Datei können Sie das Betriebssystem einrichten, auf das Sie abzielen möchten:

<DockerTargetOS>Linux</DockerTargetOS>

Um den Docker-Daemon auf dasselbe Betriebssystem umzuschalten, können Sie das Docker-Tray-Symbol oder das Docker-Einstellungsfenster verwenden (über dasselbe Menü):
 enter image description here

42
Pavel Agarkov

Stellen Sie sicher, dass Sie das richtige Betriebssystem auswählen, wenn Sie die Docker-Unterstützung aktivieren:

 OS dropdown

Ihr Docker-Daemon muss auch auf Linux-Container abzielen.

5
Celestin Bochis

Ich habe diese Fehlermeldung erhalten, als ich das Projekt für Windows erstellt habe und es später auf Linux umstellen wollte. Die Schritte sind etwas komplizierter, wenn Sie stattdessen Linux-Container verwenden möchten:

  1. Entladen Sie Docker-Compose, bearbeiten Sie das DockerTargetOS in Linux und laden Sie das Projekt anschließend erneut
  2. Gehen Sie zu docker-compose.yml. Stellen Sie sicher, dass der umgekehrte Schrägstrich ein Schrägstrich ist. Sollte wie "WebApplication/Dockerfile" aussehen
  3. Verwenden Sie in der Docker-Datei für die Basis "Microsoft/aspnetcore: 2.0" und für den Build "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. Klicken Sie mit der rechten Maustaste auf das Docker-Symbol in der Taskleiste> Einstellungen> Freigegebene Laufwerke> Wählen Sie das Laufwerk aus, in dem sich Ihr Projekt befindet.

0
Frosteeze

Im Grunde ist die Antwort von Celestin Bochis und Pavel Agarkov großartig. Allerdings wird der OS des Dockers mindestens seit dem .net Core 2.2 in der .csproj-Datei gespeichert. 

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

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

   ...
</Project>

Vergessen Sie auch nicht, Ihre Docker-Datei zu ändern. Die Bilder sollten die richtigen sein. Für .net Kern 2.2 Das ist:

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
0
Maarten Kieft

Wenn der Docker auf dem Windows-Computer ausgeführt wird, müssen Sie den Wert von "DockerTargetOS" in der .dcproj-Datei auf "Windows" ändern.

Entladen Sie das Docker-Projekt aus Visual Studio, bearbeiten Sie das Projekt und setzen Sie den Wert "Windows" auf "DockerTargetOS".

<DockerTargetOS>Windows</DockerTargetOS>