【发布时间】:2019-11-12 16:12:22
【问题描述】:
我正在使用 docker 构建和运行两个服务,一个是 .net 核心网站,另一个是 .net 核心处理器。我的网站正常运行。然而,当我尝试运行我的处理器时,我收到以下错误消息:
无法执行,因为找不到指定的命令或文件。可能的原因包括:
您拼错了内置的 dotnet 命令。
您打算执行 .NET Core 程序,但 dotnet-chores.processor.dll 不存在。
您打算运行全局工具,但在 PATH 上找不到具有此名称的 dotnet 前缀可执行文件。
- 我的网站正在运行,除了 dll 名称外,它有一个相同的 Dockerfile。
- 我已手动运行 dotnet build 和 publish 命令,它们运行成功。
- 我已验证
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-”为前缀?
如果有人对我可以做些什么来进一步调试有任何建议,我将不胜感激。
【问题讨论】:
-
当它查找
dotnet-时,通常是因为未找到该程序集,而dotnetCLI 尝试查找具有该命名约定的工具。请记住,linux 中的内容通常区分大小写,请尝试更新您的ENTRYPOINT以获得正确的程序集大小写,我假设Chores.Processor.dll。 -
尝试用
ENTRYPOINT ["find", "-iname", "chores.processor.dll"]替换入口点,看看文件名是否大小写不同。 -
@Matthew @Omair-Majid 我使用 Dockerfile 运行
docker run -it image,入口点为ENTRYPOINT ['/bin/bash'],因此我可以准确地看到容器中正在复制/生成的内容,并验证了chores-processor.dll(确切的大小写)在那里。还是没有运气。 -
在您之前的评论中,您将其称为
chores-processor.dll(注意连字符),但在您的Dockerfile 中使用chores.processor.dll(注意句点)。是这个问题吗?
标签: docker .net-core processor