docker环境变量不是';不替换

docker环境变量不是';不替换,docker,variables,environment,Docker,Variables,Environment,我创建了一个Dockerfile,它基于freeradius服务器映像。 在本地,我有一个名为raddb的文件夹,其中包含配置文件 此安装程序需要安装在多个位置,所有配置参数都相同,但有两个例外:一个IP地址和一个密码密码。 我想对环境变量执行此操作,因此我执行以下命令来启动docker容器: docker run -e SECRET=password123 -e IP=127.0.0.1 -p 1812-1813:1812-1813/udp radius -X 这是我的文件 FROM fr

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

此安装程序需要安装在多个位置,所有配置参数都相同,但有两个例外:一个IP地址和一个密码密码。 我想对环境变量执行此操作,因此我执行以下命令来启动docker容器:

docker run -e SECRET=password123 -e IP=127.0.0.1  -p 1812-1813:1812-1813/udp radius -X
这是我的文件

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
来自freeradius/freeradius服务器的
最新版本
复制raddb//etc/raddb/
运行sed-i“s | |$SECRET | g”/etc/raddb/clients.conf
运行sed-i“s | |$IP | g”/etc/raddb/clients.conf
使用2个sed命令,我想用环境变量值替换参数占位符

但是,当我启动docker容器时,这些容器是空的

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


如何正确修复此问题?

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