2017-04-20 1066 views
1

根據我的應用程序要求,我需要從python程序獲取服務器IP和服務器名稱。但是我的應用程序駐留在Ubuntu頂部的特定Docker容器內。從Python程序的Docker容器中獲取主機名

我試圖像下面

import os 
os.system("hostname") # to get the hostname 
os.system("hostname -i") # to get the host ip 

輸出: 2496c9ab2f4a172.*.*.*

但它給主機名稱作爲它的居住泊塢窗數據筒和host_ip因爲它是私有IP地址同上。我需要主機名,因爲它是服務器名稱。但是當我在終端輸入上述命令時,我能夠得到我想要的結果。

回答

1

您將無法以這種方式獲取主機系統的名稱。爲了得到它,你可以在你的Dockerfile或運行你的容器(-e選項)時定義一個環境變量。或者,你可以安裝你的主機/etc/hostname文件放入容器中,或將它複製...

這是一個例子運行命令我用它來設置環境變量HOSTNAME對容器內的主機的主機名:

docker run -it -e "HOSTNAME=$(cat /etc/hostname)" <image> <cmd> 

在Python中,您可以運行os.environ["HOSTNAME"]來獲取主機名。 至於IP地址去,我用這個命令得到運行的容器檢索:

route -n | awk '/UG[ \t]/{print $2}' 

您必須安裝路由可以使用此命令。它包含在net-tools軟件包中。 apt-get install net-tools

+0

感謝您的建議。我試圖將主機名添加到環境變量以運行容器。它不接受我的命令。我的命令是__docker運行<容器名> -e HOST_HOSTNAME ='主機名'__並且來到IP,我可以使用像__ipgetter.myip()這樣的ipgetter模塊獲得它__ –

+0

你是什麼意思,它不接受你的命令? – Anis

相關問題