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 容器,这些步骤会稍微复杂一些:
- 卸载 docker-compose,将 DockerTargetOS 编辑为 Linux,然后重新加载项目
- 前往docker-compose.yml。确保反斜杠是正斜杠。应该看起来像 "WebApplication/Dockerfile"
在 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
右键单击 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>
我是 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 容器,这些步骤会稍微复杂一些:
- 卸载 docker-compose,将 DockerTargetOS 编辑为 Linux,然后重新加载项目
- 前往docker-compose.yml。确保反斜杠是正斜杠。应该看起来像 "WebApplication/Dockerfile"
在 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
右键单击 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>