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

Rav*_*mar 4 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 
Run Code Online (Sandbox Code Playgroud)

输出: 2496c9ab2f4a172.*.*.*

但它给出的主机名是它驻留的 docker 容器 ID,而 host_ip 是它的私有 IP 地址,如上所述。我需要主机名,因为它是服务器名称。但是当我在终端中输入上述命令时,我能够得到我想要的结果。

Ani*_*nis 5

您将无法通过这种方式获取主机系统的名称。要获取它,您可以在 Dockerfile 中或在运行容器时定义一个环境变量(-e 选项)。或者,您可以将主机/etc/hostname文件装载到容器中,或将其复制...

这是我用来将环境变量 HOSTNAME 设置为容器内主机的主机名的示例运行命令:

docker run -it -e "HOSTNAME=$(cat /etc/hostname)" <image> <cmd>
Run Code Online (Sandbox Code Playgroud)

在 python 中,您可以运行os.environ["HOSTNAME"]来获取主机名。就 IP 地址而言,我使用以下命令从正在运行的容器中检索它:

route -n | awk '/UG[ \t]/{print $2}'
Run Code Online (Sandbox Code Playgroud)

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