1. ホーム
  2. docker

[解決済み] Dockerfileに複数行のコマンドを改行を維持したまま記述する方法とは?

2022-08-14 11:04:01

質問

Dockerfileに以下のようなRUNコマンドを書きたいのですが、Dockerが改行を保存してくれません。しかし、dockerが改行を保存してくれません。

RUN echo "[repo] \
name            = YUM Repository \
baseurl         = https://example.com/packages/ \
enabled         = 1 \
gpgcheck        = 0" > /etc/yum.repos.d/Repo.repoxyz

私が知っているのは \ で改行がエスケープされることは知っています。しかし、改行を保持したまま複数行を記述する方法はないでしょうか?

どのように解決するのですか?

ANSI-C quoting"と呼ばれるものは、以下のように使用することができます。 $'...' . これは元々 ksh93 機能 で利用可能ですが、現在では bash, zsh, mksh, FreeBSD sh busybox の ash を使うことができます (ただし ENABLE_ASH_BASH_COMPAT でコンパイルされた場合のみ)。

として RUN は /bin/sh をデフォルトでシェルとして使用します。 を使うので、SHELL命令でbashなどに切り替えてから使う必要があります。

でコマンドを開始します。 $' で始め、最後に ' を使用し \n\ で改行します。

SHELL ["/bin/bash", "-c"]

RUN echo $'[repo] \n\
name            = YUM Repository \n\
baseurl         = https://example.com/packages/ \n\
enabled         = 1 \n\
gpgcheck        = 0' > /etc/yum.repos.d/Repo.repoxyz