我正在使用 docker 构建和运行两个服务,一个是 .net core 网站,另一个是 .net core 处理器。我的网站已经启动并且运行得很好。然而,当我尝试运行我的处理器时,我收到以下错误消息:
无法执行,因为找不到指定的命令或文件。可能的原因包括:
您拼错了内置的 dotnet 命令。
您打算执行 .NET Core 程序,但 dotnet-chores.processor.dll 不存在。
您打算运行全局工具,但在 PATH 上找不到具有此名称的以 dotnet 为前缀的可执行文件。
dotnet publish
命令生成了一个名为“chores.processor.dll”的dll(相同的大写)我的处理器dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100 AS build
COPY /src /all/src
WORKDIR /all/src
RUN dotnet build -c Release -o /app
RUN dotnet publish --no-restore -c Release -o /app
# FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
WORKDIR /app
# COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "chores.processor.dll"]
处理器 csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Chores.Processor</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.30" />
<PackageReference Include="MySqlConnector" Version="0.59.2" />
</ItemGroup>
</Project>
网站csproj:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.30" />
<PackageReference Include="MySqlConnector" Version="0.59.2" />
</ItemGroup>
</Project>
我觉得奇怪的是,错误消息似乎在寻找
dotnet-chores.processor.dll
;为什么它带有“dotnet-”前缀?
如果有人对我可以做些什么来进一步调试这个有任何建议,我将不胜感激。
找不到 chores.processor.dll,因为正确的名称是 Chores.Processor.dll - Linux 区分大小写。所以:
ENTRYPOINT ["dotnet", "Chores.Processor.dll"]
或
CMD dotnet ./Chores.Processor.dll
该错误消息具有误导性,因为它添加了破折号。