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

时间:2019-06-14 08:33:13

标签: docker

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

Dockerfile:

<?php
$start = 28;
$count = 31;

for ($x = 0; $x < $count; $x++){
    $n = ($start + $x <= $count) ? ($start + $x) : ($start + $x - $count); 
    echo  $n.'<br>';
    // or more complex output
    //echo "<option>".$n."</option>";
}
?>

导致容器运行失败的步骤如下:

enter image description here

1 个答案:

答案 0 :(得分:1)

在Dockerfile中,入口点应仅定义要使用的可执行文件(单个文件/命令,而不是完整命令)。根据您的情况,应将其更改为ENTRYPOINT ["dotnet"],并在文件CMD ["/bin/ParallelDemo.dll"]的末尾添加CMD定义。本质上,码头工人将要做的实际上是执行dotnet /bin/ParallelDemo.dll

我还注意到您正在将WORKDIR更改为主机上的文件夹。本质上,WORKDIR就像在容器文件系统中内部中运行cd / path / to / driectory。因此,您应该只使用COPY将应用文件夹添加到图像中,就像COPY /home/dejant/desktop/app app

我也不知道publish命令的真正作用,但是我看到您还将WORKDIR更改为/ publishdocker,然后在ENTRYPOINT中在/ 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复制到新映像。

这看起来像是aprox。像这样:

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"]