在 Dockerfile 中,我从curl上传一个配置文件,然后需要对其进行一些编辑,这是一个示例结构:
client:
...
server:
applicationConnectors:
- type: http
port: 8989
# for security reasons bind to localhost
bindHost: localhost
requestLog:
appenders: []
adminConnectors:
- type: http
port: 8990
bindHost: localhost
我需要编辑这两个bindHost
参数,如果我可以在 期间将它们的值作为参数传递,那就太好了docker build
,但我似乎没有在互联网或文档中找到任何内容。
答案1
如果我正确理解了这个问题,请在您的 Dockerfile 命令中将您的curl 通过管道传输到 sed:
curl XXX | sed -e "s/bindHost: localhost/bindHost: ${your_variable}/g" > yourfile.yaml
或者您可以在下载文件后对其进行编辑:
sed -ie "s/bindHost: localhost/bindHost: ${your_variable}/g" /path/to/your/file
答案2
您可以使用“--build-arg”将值传递到 Dockerfile,并在调用中使用该值RUN sed
,例如注入 IP 地址参数:
FROM whatever
COPY config.file /etc/config.file
ARG IPADDR
RUN sed -i -r "s/#IPADDR#/$IPADDR/g" /etc/config.file
你可以使用以下方式构建:
docker build -t foobar --build-arg IPADDR=11.12.13.14 .
您还可以将构建参数转换为运行时环境变量:
ARG ARGVAR
ENV ENVVAR $ARGVAR
如果您的配置语法可以执行环境变量的替换(无需运行sed
),那就更好了。
但这使得图像有点过于具体,您可以在启动容器时设置环境变量(docker run
使用--env
, --env-list
),并使用这些值在作为容器条目的脚本中即时编辑配置文件一点,当然除非你的配置语法(或启动参数)可以进行 envvar 替换。