从Python程序的Docker容器中获取主机名

问题描述:

根据我的应用程序要求,我需要从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地址同上。我需要主机名,因为它是服务器名称。但是当我在终端输入上述命令时,我能够得到我想要的结果。

您将无法以这种方式获取主机系统的名称。为了得到它,你可以在你的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