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

问题描述 投票:0回答:2

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

docker dockerfile
2个回答
2
投票

您收到此错误是因为在构建映像时,执行的命令与主机“隔离”并在单独的命名空间层中运行。

你需要做的是将ip地址作为构建arg传递。

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地址。


0
投票

提供输出的命令(ip -4 addr show wlan0 | grep -oP'(?<= inet \ s)\ d +(。\ d +){3}')在主机中运行,这就是为什么要输出它的原因。

当您尝试通过Dockerfile运行相同的命令时,它将创建运行RUN命令的临时容器启动,并且它将找不到wlan0设备。由于这个原因,你得到错误“设备”wlan0“不存在”。

我有个建议

要解决您的问题,请在主机中创建一个cron作业,它会自动将IPaddress更新到文件中并将其放入Volume中。与容器共享卷并从容器访问此文件并在您的应用程序中使用它

© www.soinside.com 2019 - 2024. All rights reserved.