使用 Docker 容器化 .NET 7.0 控制台和 ASP.NET 应用程序?

问题描述 投票:0回答:2

我有点卡住了,我有一个问题 here 是关于 Docker 容器中缺少 /bin/sh 的问题。我正在为 LINUX 上的 .NET 7.0 寻找正确的 docker 镜像,它可以托管带有嵌入式 ASP.NET OWIN Web 服务器的控制台应用程序,我需要在这里制作自定义镜像吗?他们似乎都没有/bin/sh?

错误:创建垫片任务失败:OCI 运行时创建失败:runc 创建失败:无法启动容器进程:exec:“/bin/sh”:stat /bin/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" ]
c# .net docker
2个回答
0
投票

你试过微软官方的Docker镜像了吗? 就像这个 -

mcr.microsoft.com/dotnet/aspnet:7.0
.


0
投票

ASP.NET Core 不需要 OWIN,它使用自己的中间件管道并提供 OWIN 所做的一切。我不确定它可以使用OWIN,还是会干扰ASP.NET Core。

ASP.NET Core 应用程序也是 控制台应用程序,所以开箱即用地解决了这个问题。它们可以很容易地打包成 Docker 镜像。 ASP.NET Core 文档 展示了如何手动添加 Dockerfile 来构建和打包 Web 应用程序,但这也可以通过 使用项目模板设置.

Dockerfile 使用SDK 镜像构建应用程序,并将输出复制到基于Runtime 镜像的新镜像。这样可以确保最终图像尽可能小:

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

实际的发布命令是

dotnet publish -c release -o /app --no-restore
。如果需要,您可以创建单个文件可执行文件,但由于您使用的是容器,因此可以使用
dotnet aspnetapp.dll
来运行 Web 应用程序。

.NET 7 可以直接发布到 Docker 镜像,消除了 Dockerfile。您可以通过单个配置文件切换来做您想做的事。

从博客示例中,您可以创建一个 MVC 应用程序

# create a new project and move to its directory
dotnet new mvc -n my-awesome-container-app
cd my-awesome-container-app

# add a reference to a (temporary) package that creates the container
dotnet add package Microsoft.NET.Build.Containers

发布到 Docker

# publish your project for linux-x64
dotnet publish --os linux --arch x64 -c Release -p:PublishProfile=DefaultContainer
© www.soinside.com 2019 - 2024. All rights reserved.