我需要在wlan0
中将Dockerfile
ip地址作为环境变量传递。正如DHCP
所示,因此IP地址会有所改变。我想运行以下命令来获取ip地址,然后在Dockerfile中使用它:
ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
上面的命令给了我192.168.1.125
。我想使用此IP地址将其作为环境变量传递。为此,我使用了:
RUN wlan="$(ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')" && echo $wlan
ENV HOST_WLAN0=$wlan
但它给了我一个错误Device "wlan0" does not exist.
。我该如何解决这个问题。?
答案 0 :(得分:2)
您收到此错误是因为在构建映像时,执行的命令正在被隔离&#34;来自主机并在单独的命名空间层中运行。
您需要做的是将IP地址作为构建参数传递。
<强> Dockerfile 强>:
...
ARG wlan
ENV HOST_WLAN0=$wlan
构建命令:
docker build --build-arg wlan=$(ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}') ...
这将在Docker构建中输入正确的IP地址。
答案 1 :(得分:0)
命令(ip -4 addr show wlan0 | grep -oP&#39;(?&lt; = inet \ s)\ d +(。\ d +){3}&#39;)提供输出正在运行主机就是你输出它的原因。
当您尝试通过Dockerfile运行相同的命令时,它将创建运行RUN命令的临时容器启动,并且它将找不到wlan0设备。由于这个原因,你得到了错误&#34; device&#34; wlan0&#34;不存在。&#34;
我有一个建议
要解决您的问题,请在主机中创建一个cron作业,它会自动将IPaddress更新到文件中并将其放入Volume中。与容器共享卷并从容器访问此文件并在您的应用程序中使用它