Ale*_*ian 4 powershell docker windows-container
这很简单.我想用代码检测我的进程是否在windows容器中运行.有一些例子,但它们都是基于linux的容器.
我正在寻找一个独特而明确的docker,它可以用来确定进程是否在容器托管的Windows操作系统内执行而不是其他方面.
我的首选语言是PowerShell,但如果有人指出如何检测,我会将其移植到PowerShell.
新读者可以跳到标有"更新"的部分,其中包含已接受的解决方案.
在命令提示符下使用whoami快速检查显示容器内使用的域和用户名的组合似乎相当不寻常.所以我使用这段代码来解决问题:
function Test-IsInsideContainer {
if( ($env:UserName -eq "ContainerAdministrator") -and ($env:UserDomain -eq "User Manager") ) {
$true
}
else {
$false
}
}
Run Code Online (Sandbox Code Playgroud)
更新:另一个选项是检查服务cexecsvc是否存在.互联网搜索并未提供有关此服务的大量信息,但其名称(Container Execution Agent)表明它只存在于容器内部(我在Win10和Server2016 Docker主机上进行了一些快速测试验证).所以这个代码可能符合你的要求(我是Powershell的新手):
function Test-IsInsideContainer {
$foundService = Get-Service -Name cexecsvc -ErrorAction SilentlyContinue
if( $foundService -eq $null ) {
$false
}
else {
$true
}
}
Run Code Online (Sandbox Code Playgroud)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 下有一个“ContainerType”注册表值。
所以:
function Test-IsInsideContainer {
$containerType = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control").ContainerType
$containerType -ne $null
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1259 次 |
最近记录: |