Docker

如何在 Dockerfile 或 shell 中編輯 yaml 文件?

  • February 7, 2020

在 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,但我似乎沒有在 Internet 或文件中找到任何內容。

如果我理解正確的問題,在您的 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

您可以使用“–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 替換。

引用自:https://unix.stackexchange.com/questions/566311