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 文件并更改 add > orchestrations > 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 中找到了以上是关于ASP.NET Core docker 构建错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 3.1 Angular Web App 在 Windows 上构建和运行,但在 Mac OSX 和 Docker 上失败
构建时的ASP.NET Core错误 - 缺少一个或多个编译引用
ASP.Net Core - 从 Razor 视图调用静态方法 - 构建失败而不给出错误