找不到匹配命令的可执行文件“;dotnet-…dll“;发出docker run命令后
我创建了一个简单的aspnet核心应用程序来与docker一起玩。 将Dockerfile和DockerRigNore放置在解决方案文件夹中 Dockerfile: 此处可以看到导致容器运行失败的步骤:找不到匹配命令的可执行文件“;dotnet-…dll“;发出docker run命令后,docker,Docker,我创建了一个简单的aspnet核心应用程序来与docker一起玩。 将Dockerfile和DockerRigNore放置在解决方案文件夹中 Dockerfile: 此处可以看到导致容器运行失败的步骤: 在Dockerfile中,入口点只需定义要使用的可执行文件(单个文件/命令,而不是完整的命令)。在您的情况下,您应该将其更改为ENTRYPOINT[“dotnet”],并在文件CMD[“/bin/ParallelDemo.dll”]的末尾添加CMD定义。实际上,docker要做的就是执行dotn
在Dockerfile中,入口点只需定义要使用的可执行文件(单个文件/命令,而不是完整的命令)。在您的情况下,您应该将其更改为
ENTRYPOINT[“dotnet”]
,并在文件CMD[“/bin/ParallelDemo.dll”]
的末尾添加CMD定义。实际上,docker要做的就是执行dotnet/bin/ParallelDemo.dll
我还注意到,您正在将WORKDIR更改为主机上的一个文件夹。WORKDIR本质上类似于在容器文件系统内部运行cd/path/to/driectory。因此,您只需使用副本将应用程序文件夹添加到图像中,如SoCOPY/home/dejant/desktop/app-app
我也不知道publish命令的真正作用,但我看到您也将WORKDIR更改为/publishdocker,然后在入口点运行/bin/文件夹中的.dll,这实质上意味着最后一个WORKDIR是不必要的
我不是.NET开发人员,但我假设-o标志定义了您希望在哪里发布项目?因此,可能.dll文件也位于该目录中的某个位置
因此,您的Dockerfile会变成:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
LABEL maintainer deic@gmail.com
COPY /home/dejant/desktop/app /app
WORKDIR /app
RUN dotnet restore
RUN dotnet publish ./ParallelDemo/ParallelDemo.csproj -o /publish/
ENTRYPOINT ["dotnet"]
CMD ["/THE/CORRECT/PATH/TO/YOUR/.DLL/LOCATION"] ## Replace with the proper value
更新 实际上,由于您似乎打算将其用作多阶段构建的一部分,那么您可能只想在构建映像中构建应用程序,然后将.dll复制到新映像中 那看起来差不多。像这样:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
LABEL maintainer deic@gmail.com
COPY /home/dejant/desktop/app /app
WORKDIR /app
RUN dotnet restore
RUN dotnet publish ./ParallelDemo/ParallelDemo.csproj -o /publish/
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
COPY --from=build /THE/CORRECT/PATH/TO/YOUR/.DLL/LOCATION /app/ParallelDemo.dll
WORKDIR /app
ENTRYPOINT ["dotnet"]
CMD ["/app/ParallelDemo.dll"]
感谢您指出这一点,不幸的是,我仍然遗漏了一些东西,收到了相同的错误…您可以尝试通过运行
docker run-it--entrypoint sh--rm pa1检查docker映像状态,并检查.dll文件是否位于正确的位置。它将允许您在图像创建的容器中使用shell,这样您还可以检查手动运行命令是否有效。您可以更精确地说,当我在容器中输入shell时,我应该怎么做?在容器中运行shell后,您可以使用cd/app
查看.dll是否在那里。如果它在那里,您可以尝试手动运行dotnet/app/ParallelDemo.dll
,看看是否有效
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
LABEL maintainer deic@gmail.com
COPY /home/dejant/desktop/app /app
WORKDIR /app
RUN dotnet restore
RUN dotnet publish ./ParallelDemo/ParallelDemo.csproj -o /publish/
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
COPY --from=build /THE/CORRECT/PATH/TO/YOUR/.DLL/LOCATION /app/ParallelDemo.dll
WORKDIR /app
ENTRYPOINT ["dotnet"]
CMD ["/app/ParallelDemo.dll"]