docker 环境变量未被替换

docker environment variables aren't replaced

我创建了一个基于 freeradius 服务器镜像的 Dockerfile。 我在本地有一个名为 raddb 的文件夹,其中包含配置文件。

此安装程序需要安装在多个位置,所有配置参数都相同,除了 2 个参数,一个 IP 地址和一个密码。 我想用环境变量来做到这一点,所以我执行了以下命令来启动我的 docker 容器:

docker run -e SECRET=password123 -e IP=127.0.0.1  -p 1812-1813:1812-1813/udp radius -X

这是我的 Dockerfile

FROM freeradius/freeradius-server:latest

COPY raddb/ /etc/raddb/

RUN sed -i "s|<SECRET>|$SECRET|g" /etc/raddb/clients.conf
RUN sed -i "s|<IP>|$IP|g" /etc/raddb/clients.conf

对于 2 个 sed 命令,我想用环境变量值替换我的参数占位符。

然而,当我启动 docker 容器时,这些都是空的。

我想这是因为 sed 命令在 docker 构建期间是 运行,此时环境变量没有值,所以这可能就是原因。

我该如何正确解决这个问题?

docker run 中设置 envs 之前构建映像时执行 sed 命令。 当容器以 CMD 启动时,您可以执行脚本并更改那里的文件。 仅使用最后一个 CMD,因此您必须在脚本末尾调用原始命令 (freeradius)。