从容器(kubernetes)中运行的应用程序获取退出代码

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

我正在尝试从 kubernetes 集群中运行的应用程序退出。我可以看到 Pod 状态为“错误”,但我有兴趣获取确切的退出代码。

Docker 文件:

# getting base image 
FROM mcr.microsoft.com/windows/servercore:ltsc2019

# Copy powershell scripts
COPY scripts/ scripts/

# copy app
COPY app/ app/

# run script 
ENTRYPOINT ["powershell", "C:\\scripts\\myscript.ps1"]

myscript.sp1:

# Run script 1
Invoke-Expression "& `"C:\\scripts\\myscript1.ps1`" "

# Run script 2
Invoke-Expression "& `"C:\\scripts\\myscript2.ps1`" "


#Invoke exe
Invoke-Expression "& `"C:\app\MyApp.exe`" "

# Write Exit Code
Write-Host $LASTEXITCODE

Write-Host "Exit with Exit Code"

exit $LASTEXITCODE

出现错误时,我可以看到 pod 状态为“错误”,但我需要获取从 myscript.ps1 返回的确切退出代码。当我查看 Pod 日志时可以看到退出代码,但在容器退出代码中没有看到它。

我也尝试过这个如何使用 kubectl 启动容器并获取退出代码?没有 kubectl exec 但状态为 true 或 false

kubectl run myjob4 -it --restart=Never --image=myacr.azurecr.io/myapp:v1 --restart=Never --overrides='"{\"apiVersion\":\"v1\",\"spec\":{\"nodeSelector\":{\"kubernetes.azure.com/os-sku\":\"Windows2019\",\"kubernetes.io/os\":\"windows\"}}}"'

输出:

10 使用退出代码退出 pod 默认/myjob5 终止(错误)

$?

输出:

错误

如何获取退出代码 10(在本例中)而不是 false?

powershell kubernetes containers exit-code
1个回答
1
投票

仅 PowerShell CLI

-File 参数(
powershell.exe
对于 Windows PowerShell,
pwsh
对于 PowerShell (Core) 7+) 通过 as 传递 脚本文件的退出代码-is,使用
-File
是调用脚本文件的正确方法。

  • powershell.exe
    默认为
    -Command
    CLI 参数(而
    pwsh
    默认为
    -File
    ),默认情况下仅报告 abstract 退出代码,即
    0
    如果最后一条语句执行成功,则
     1
    否则。有关详细信息,请参阅此答案

因此,请在 Dockerfile 中使用以下内容:

# run script 
ENTRYPOINT ["powershell", "-File", "C:\\scripts\\myscript.ps1"]

两点旁白:

因此,请在 PowerShell 脚本中使用以下内容:

# Alternatively, simply: # C:\scripts\myscript1.ps1 & "C:\scripts\myscript1.ps1" # Run script 2 & "C:\scripts\myscript2.ps1" #Invoke exe & "C:\app\MyApp.exe" # ... exit $LASTEXITCODE
    
© www.soinside.com 2019 - 2024. All rights reserved.