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

olqngx59  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(136)

我正在尝试从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状态为“Error”(错误),但我需要从myscript.ps1返回准确的退出代码。查看Pod日志时可以看到退出代码,但在容器退出代码中看不到。
我也试过这个How to start container with kubectl and get exit code back? without kubectl exec,但得到的状态为真或假

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使用“退出代码”窗格默认值退出/myjob 5已终止(错误)
$?
产出:

而不是false,我如何才能得到退出代码10(在这种情况下)?

zengzsys

zengzsys1#

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

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

因此,在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

相关问题