Search code examples
powershelldockerwindows-container

Detect if process executes inside a Windows Container


It's simple. I would like to detect with code if my process is running inside a windows container. There are examples but they are all for linux based containers.

I'm looking for something unique and explicit to docker that can be used to make a safe conclusion whether a process is executing inside a container hosted windows operating system and not otherwise.

My preferred language is PowerShell but if someone points out the how to detect, I'll port it to PowerShell.


Solution

  • New readers can skip ahead to the part marked with "Update" which contains the accepted solution.

    A quick check with whoami on the command prompt showed that the combination of domain and username that is used inside a container seems to be rather unusual. So I used this code to solve the problem:

    function Test-IsInsideContainer {
      if( ($env:UserName -eq "ContainerAdministrator") -and ($env:UserDomain -eq "User Manager") ) {
        $true
      }
      else {
        $false
      }
    }
    

    Update: Another option is to check if the service cexecsvc exist. An internet search did not yield much information about this service, but its name (Container Execution Agent) suggests that it only exists inside of containers (which I verified with some quick test on Win10 and a Server2016 Docker-host). So maybe this code meets your requirements (I am a newbie in Powershell):

    function Test-IsInsideContainer {
      $foundService = Get-Service -Name cexecsvc -ErrorAction SilentlyContinue
      if( $foundService -eq $null ) {
        $false
      }
      else {
        $true
      }
    }