簡體   English   中英

優雅地停止 azure 容器實例

[英]gracefully stop azure container instance

我有一個 .net 核心 5.0 應用程序包裹在 docker 圖像中,我可以在 Docker 桌面下使用 Linux 容器模式將圖像作為容器運行,當我停止容器應用程序時能夠捕獲以下事件,這就是我想要的。

System.Runtime.Loader.AssemblyLoadContext.Default.Unloading += ctx =>
{
   Console.WriteLine("Unloading");
};

AppDomain.CurrentDomain.ProcessExit += (s, e) =>
{
   Console.WriteLine("Exitting");
};

但是,一旦我將 docker 圖像推送到 azure 注冊表並作為 Azure 容器實例啟動,既不會通過門戶中的按鈕停止也不會重新啟動。azure 會觸發這些事件。 azure 雲 shell 命令的相同問題。

az container restart --name gracefullApp --resource-group gracefullAppGroup
az container stop --name gracefullApp --resource-group gracefullAppGroup

知道如何實現嗎?

dockerfile是VS2019生成的

FROM mcr.microsoft.com/dotnet/runtime:5.0-buster-slim AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["gracefullApp/gracefullApp.csproj", "gracefullApp/"]
RUN dotnet restore "gracefullApp/gracefullApp.csproj"
COPY . .
WORKDIR "/src/gracefullApp"
RUN dotnet build "gracefullApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "gracefullApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "gracefullApp.dll"]

不幸的是,這是因為當您運行“docker stop”時,docker 向容器 pid 1 發送了一個 Sigterm。

sigterm 信號的作用是提醒進程關閉,但進程可能會完成它在信號期間所做的任何事情,然后在完成后自行終止。 將其視為正常關機。

Azure 容器實例發送 SIGKILL 信號,這在某種意義上更具破壞性,因為它不關心進程正在做什么或之后將做什么,它只會終止。 這就是為什么您遇到此問題但在 docker 中運行良好的原因,我知道自 2021 年以來,它目前也是其 github 板上的一個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM