我正在尝试从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(在这种情况下)?
1条答案
按热度按时间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中使用以下内容:
字符串
两个旁白:
Invoke-Expression
(iex
) should generally be avoided;除特殊情况外,don't use it to invoke an external program or PowerShell script / command。\
字符对PowerShell没有特殊意义,因此您永远不需要将它们转义为\\
(PowerShell的escape character是```,即所谓的反勾号)。因此,请在PowerShell脚本中使用以下内容:
型