Dockerfile:如何运行linux命令并将其输出保存在变量中

时间:2018-01-04 06:37:23

标签: docker dockerfile

我需要在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.。我该如何解决这个问题。?

2 个答案:

答案 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中。与容器共享卷并从容器访问此文件并在您的应用程序中使用它