我有一点卡住了,我有一个问题,在这里是围绕失踪/bin/sh在Docker容器.我正在寻找正确的docker镜像为.NET 7.0在LINUX上,可以托管一个控制台应用程序与嵌入式ASP.NET OWIN Web服务器,我需要在这里做一个自定义的?他们似乎都没有/bin/sh?
错误:无法创建填充任务:OCI运行时创建失败:runc创建失败:无法启动容器进程:exec:“/bin/sh”:统计/分组/sh:没有这样的文件或目录:未知的
下面是我的Docker文件:
FROM ubuntu/dotnet-aspnet:7.0-22.10_edge
COPY . .
RUN dotnet publish "./RaspCronJobServer/RaspCronJobServer.csproj" -o /application
WORKDIR /application
EXPOSE 5000
ENTRYPOINT [ "dotnet", "RaspCronJobServer.dll" ]
1条答案
按热度按时间7gcisfzg1#
看起来真实的的问题是如何使用Chiseled Ubuntu容器映像。
dotnet-aspnet:7.0-22.10_edge
是Chiseled映像的名称,而不是常规映像。正如链接的博客文章所解释的那样,这些基本上是无发行版映像,剥离到最基本的部分。没有shell或应用程序本身不直接需要的任何东西。构建应用程序仍然需要常规的SDK映像,但最终目标将是
chiseled
映像。从使用凿刻容器图像的例子中,Dockerfile应该看起来像这样:
这将正常构建应用程序,但将其打包在Chiseled图像中,而不是普通的
runtime
图像中。原始答案
简短版本:您已经可以将ASP.NET Core 7 Web应用直接发布到Docker:
ASP.NET Core不需要OWIN,它使用自己的中间件管道并提供OWIN所做的一切。我不确定它是否可以使用OWIN,或者它会干扰ASP.NET Core。
ASP.NET Core应用程序 * 也是 * 控制台应用程序,因此问题可以开箱即用地解决。它们可以轻松地打包到Docker映像中。ASP.NET Core文档展示了如何手动添加Dockerfile来构建和打包Web应用程序,但也可以通过using project template settings完成。
Dockerfile使用SDK镜像构建应用程序,并将输出复制到基于Runtime镜像的新镜像。这确保了最终镜像尽可能小:
实际的发布命令是
dotnet publish -c release -o /app --no-restore
。如果需要,您可以创建单个文件可执行文件,但由于您使用容器,因此可以使用dotnet aspnetapp.dll
来运行Web应用程序。直接发布到Docker
.NET 7可以publish directly to Docker images,消除了Dockerfile。你可以用一个配置文件开关做你想做的事情。
在博客示例中,您可以使用
并将其发布到Docker