Docker
如何在 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
,但我似乎沒有在 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 替換。