我创建了一个简单的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>";
}
?>
导致容器运行失败的步骤如下:
答案 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"]