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

时间:2017-04-20 07:38:46

标签: python linux ubuntu docker

根据我的应用程序要求,我需要从python程序中获取服务器IP和服务器名称。但是我的应用程序驻留在Ubuntu顶部的特定docker容器中。

我尝试过以下

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

输出: 2496c9ab2f4a172.*.*.*

但是它将主机名称作为它的驻留docker containerid而host_ip作为上面的私有ip地址。我需要主机名,因为它是服务器名称。但是当我在终端中键入以上命令时,我能够得到我想要的结果。

3 个答案:

答案 0 :(得分:2)

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

您必须安装路由才能使用此命令。它包含在包网络工具中。 apt-get install net-tools

答案 1 :(得分:0)

您可以尝试以下操作:

def determine_docker_host_ip_address():
    cmd = "ip route show"
    import subprocess
    process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
    output, error = process.communicate()
    return str(output).split(' ')[2]

答案 2 :(得分:-1)

以下是替代方法:

ENV:

NODENAME: '{{.Node.Hostname}}'

这将为您获取节点的主机名,容器在该主机上作为环境变量运行(在Docker-Swarm / CoreOs Stable上测试)。