Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找不到匹配命令的可执行文件“;dotnet-…dll“;发出docker run命令后_Docker - Fatal编程技术网

找不到匹配命令的可执行文件“;dotnet-…dll“;发出docker run命令后

找不到匹配命令的可执行文件“;dotnet-…dll“;发出docker run命令后,docker,Docker,我创建了一个简单的aspnet核心应用程序来与docker一起玩。 将Dockerfile和DockerRigNore放置在解决方案文件夹中 Dockerfile: 此处可以看到导致容器运行失败的步骤: 在Dockerfile中,入口点只需定义要使用的可执行文件(单个文件/命令,而不是完整的命令)。在您的情况下,您应该将其更改为ENTRYPOINT[“dotnet”],并在文件CMD[“/bin/ParallelDemo.dll”]的末尾添加CMD定义。实际上,docker要做的就是执行dotn

我创建了一个简单的aspnet核心应用程序来与docker一起玩。 将Dockerfile和DockerRigNore放置在解决方案文件夹中

Dockerfile:

此处可以看到导致容器运行失败的步骤:


在Dockerfile中,入口点只需定义要使用的可执行文件(单个文件/命令,而不是完整的命令)。在您的情况下,您应该将其更改为
ENTRYPOINT[“dotnet”]
,并在文件
CMD[“/bin/ParallelDemo.dll”]
的末尾添加CMD定义。实际上,docker要做的就是执行
dotnet/bin/ParallelDemo.dll

我还注意到,您正在将WORKDIR更改为主机上的一个文件夹。WORKDIR本质上类似于在容器文件系统内部运行cd/path/to/driectory。因此,您只需使用副本将应用程序文件夹添加到图像中,如So
COPY/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"]