检测进程是否在Windows容器内执行

Ale*_*ian 4 powershell docker windows-container

这很简单.我想用代码检测我的进程是否在windows容器中运行.有一些例子,但它们都是基于linux的容器.

我正在寻找一个独特而明确的docker,它可以用来确定进程是否在容器托管的Windows操作系统内执行而不是其他方面.

我的首选语言是PowerShell,但如果有人指出如何检测,我会将其移植到PowerShell.

fra*_*och 5

新读者可以跳到标有"更新"的部分,其中包含已接受的解决方案.

在命令提示符下使用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)


pha*_*ing 5

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)