如何在 Dockerfile 或 shell 中编辑 yaml 文件?

如何在 Dockerfile 或 shell 中编辑 yaml 文件?

在 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 替换。

相关内容