繁体   English   中英

将唯一的硬件标识符传递给Docker容器

[英]Passing unique hardware identifier to Docker container

我想从主机获取特定于硬件的信息到Docker容器中。

我有2个Docker Web应用程序clientserver已部署到Docker群。 我将server部署为连接到数据库的单个容器,并将client作为复制服务部署到群集中的每个工作节点。 client将数据发送回serverserver保留一个表数据库,该表通过唯一标识符(MAC地址)跟踪从clients client发送的数据。

我按如下所示在Dockerfile中启动client python应用程序,以便它在将数据发送回server时知道其MAC地址。

python app.py --mac-address=12345

client当前使用我手动键入的硬编码的mac-address启动。我在Mac上开发,但是部署到Linux机器,因此一些使容器访问主机网络接口的变通办法似乎在其中不起作用我的开发环境。

理想情况下,我想通过一些bash命令/脚本来传递该值(任何唯一标识符)。 我有以下脚本来捕获MAC地址:

mac=$(ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}')
echo $mac > 'mac.txt'

但是,这必须在主机上运行。

我遇到过以下解决方案

docker run -e HOST_MAC=$(ifconfig -a | grep -Po 'HWaddr \K.*$') image

然后在python应用程序中访问环境变量。

或者这个解决方案

docker run --rm -v $(pwd)/mybashscript.sh:/mybashscript.sh ubuntu bash /mybashscript.sh

每个解决方案都在单独运行容器。 我正在使用单个管理员的docker-composedocker stack deploy 因此,我不希望脚本文件已经存在于每台主机(工作节点)上。

我最后想到将文件从容器“ SCPI-ing”到主机,然后从容器“ SSH-ing”到主机,执行脚本并捕获输出。 但是,我还没有找到语法。 就像是:

scp mac_address.sh user@host_hostname:
max=$(ssh user@host_hostname "mac_address.sh")

我不在乎唯一标识符是MAC地址还是其他标识符; 但是,从本质上讲,即使一个容器出现故障并且出现了一个新的标识符,我也希望这种唯一标识符能够持续存在。

有人做过类似的事情吗?

我不认为这是用作“唯一ID”的最佳选择。 您已经声明要有目的地重复使用ID,因此请小心地将其称为“ 唯一 ”。

如您所知,您将需要谨慎使用此方法-如果要在物理机上运行两个实例,它们将被标识为“同一”节点。

我也不能强调这一点: 不要使用此标识任何身份验证。 这包括将报告的数据归因于特定的节点/设备/用户。 我希望从您的系统中检索信息需要适当的身份验证。

如果您打算出于上述目的使用此“ 唯一ID ”,请考虑使用加密方法。


一些选项,所有选项都应具有静态分辨率。

将MAC地址映射到容器的VFS中

由于sysfs ,这可能仅适用于linux,我对此无能为力。

$ docker run --rm -it -v /sys/class/net/enp0s31f6/address:/tmp/host_mac:ro \
    ubuntu:latest bash
root@ab868434bf02:/# cat /tmp/host_mac
70:85:c2:28:fa:c2

使用主机的容器端MAC地址

如果您打算编写Python,则无需安装工具即可解决此问题。 这与虚拟接口相关,因此,如果您习惯于添加/删除虚拟网络,则它可能会/将会改变。

$ docker run --rm -it ubuntu:latest bash
root@9141327276c7:/# apt-get update && apt install -y iputils-ping net-tools
root@9141327276c7:/# HOST_IP="$(route -n | grep '^0\.0\.0\.0 ' | awk '{print $2}')"
root@9141327276c7:/# ping -c1 -w 500 ${HOST_IP} >/dev/null
root@9141327276c7:/# arp | grep "^${HOST_IP} " | awk '{print $3}'
02:42:1d:da:1c:e7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM