DockerfileまたはShellでyamlファイルを編集するには?

DockerfileまたはShellでyamlファイルを編集するには?

Dockerfileからカールの設定ファイルをアップロードした後、いくつかの編集が必要です。以下は構造例です。

client:
  ...
server:
  applicationConnectors:
  - type: http
    port: 8989
    # for security reasons bind to localhost
    bindHost: localhost
  requestLog:
      appenders: []
  adminConnectors:
  - type: http
    port: 8990
    bindHost: localhost

これら2つのパラメータを編集する必要がありますbindHostが、その期間にその値をパラメータとして渡すことができれば良いと思いますがdocker build、インターネットやドキュメントには何も見つからないようです。

答え1

質問を正しく理解したら、Dockerfileコマンドでカールを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使用)環境変数を設定し、その値を使用して設定構文でない限り、スクリプトで設定ファイルをコンテナエントリとしてすぐに編集できます。 (または実行パラメータ)Envvarの置き換えが可能です。--env--env-list

関連情報