很簡單。 我想用代碼檢測我的進程是否在windows容器內運行。有一些例子,但它們都是基於Linux的容器。檢測進程是否在Windows容器內執行
我正在尋找一些獨特且顯式的docker,可以用來做出一個安全的結論,無論是在一個容器託管的Windows操作系統內執行一個進程而不是其他方式。
我的首選語言是PowerShell,但如果有人指出如何檢測,我會將它移植到PowerShell。
很簡單。 我想用代碼檢測我的進程是否在windows容器內運行。有一些例子,但它們都是基於Linux的容器。檢測進程是否在Windows容器內執行
我正在尋找一些獨特且顯式的docker,可以用來做出一個安全的結論,無論是在一個容器託管的Windows操作系統內執行一個進程而不是其他方式。
我的首選語言是PowerShell,但如果有人指出如何檢測,我會將它移植到PowerShell。
新讀者可以跳到標有「Update」的部分,其中包含接受的解決方案。
快速檢查與WHOAMI在命令提示表明,即在容器內使用的域和用戶名的組合似乎是相當不尋常的。所以我用這個代碼來解決這個問題:
function Test-IsInsideContainer {
if(($env:UserName -eq "ContainerAdministrator") -and ($env:UserDomain -eq "User Manager")) {
$true
}
else {
$false
}
}
更新:另一種選擇是檢查服務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
}
}
這確實是一個可行的解決方案,但我仍然在尋找可能會導致衝突的值的獨立值。例如在亞馬遜,你可以嘗試一個特定的元數據端點,類似於@dominique在他自己的答案中所建議的。 –
我已經用新選項更新了我的答案... –
服務理念屬於獨特類別。我現在好奇這個服務是幹什麼的。我會做一些檢查並回來給你。我需要檢查這兩個納米和核心基地的圖像。現在謝謝你。 –
下面會工作嗎? PS C:\> (Get-NetAdapter).Name -match "container" True
我要檢查一下,但我在想更強大的東西。建議只是檢查網絡適配器名稱,這可能會導致誤報,具體取決於適配器的名稱。是不是有更獨特和明確的是作爲碼頭標記的行爲? –
我想你可以拼湊一堆東西來找出它是否在容器中。例如服務器服務將被停止,將有用戶稱爲ContainerAdmin等。把&放在每一個之間,如果全都是真的,那麼它實際上就是容器。記住整點是讓操作系統認爲它正在運行它自己的操作系統 –
我想下面將提供99.9999%,你在容器內PS C:\>(invoke-webrequest http://172.17.208.1:2375/containers/json -usebasicparsing).Rawcontent -match $ env:computername' –
由於碼頭工人17.06的起你可以使用DNS條目docker.for.mac.localhost和docker.for.mac.localhost,以確定容器中的Mac或Windows主機上運行。如果這些主機名都不能被ping通,那麼你可以安全地假定它是一個linux主機。這可能不適用於Swarms。
我不是Bash的專家,但是一個例子可能看起來像這樣。
#!/bin/bash
ping -c 1 docker.for.mac.localhost &>/dev/null
if [ $? -eq 0 ]; then
echo "Mac Host"
fi
ping -c 1 docker.for.win.localhost &>/dev/null
if [ $? -eq 0 ]; then
echo "Windows Host"
fi;
我希望這可以幫助你在PowerShell中編寫腳本和每當我需要在Windows這樣的事情請不要份額。
'ping docker.for.win.localhost'在Windows容器上不起作用 –
這個問題肯定需要一些改進。你嘗試過什麼來實現你的目標?什麼是這些Linux的例子,你是什麼意思與Windows容器?看看標籤我想你想看看你的腳本是運行在Linux上還是在Windows泊塢窗圖像上。但它只是一個猜測...... – Clijsters
感謝您的反饋,但我的觀點是,當搜索這個主題時,你只能得到Linux的特定答案。我正在尋找可以檢測一個cigs是否在容器內運行的方法。我沒有嘗試過任何東西,因爲我不知道從哪裏開始,因爲我找不到一個好的參考。出於這個原因,我的問題確實是「空洞的」。 –